From ba7950bb805883edf029b1c0af15be75c9b0944b Mon Sep 17 00:00:00 2001 From: Darryl Pogue Date: Fri, 17 Feb 2012 23:55:02 -0800 Subject: [PATCH] Kill pnMail. --- Sources/Plasma/NucleusLib/CMakeLists.txt | 1 - .../Plasma/NucleusLib/pnMail/CMakeLists.txt | 16 - Sources/Plasma/NucleusLib/pnMail/Pch.h | 60 -- Sources/Plasma/NucleusLib/pnMail/pnMail.cpp | 726 ------------------ Sources/Plasma/NucleusLib/pnMail/pnMail.h | 112 --- 5 files changed, 915 deletions(-) delete mode 100644 Sources/Plasma/NucleusLib/pnMail/CMakeLists.txt delete mode 100644 Sources/Plasma/NucleusLib/pnMail/Pch.h delete mode 100644 Sources/Plasma/NucleusLib/pnMail/pnMail.cpp delete mode 100644 Sources/Plasma/NucleusLib/pnMail/pnMail.h diff --git a/Sources/Plasma/NucleusLib/CMakeLists.txt b/Sources/Plasma/NucleusLib/CMakeLists.txt index 336bbfae..fed70c57 100644 --- a/Sources/Plasma/NucleusLib/CMakeLists.txt +++ b/Sources/Plasma/NucleusLib/CMakeLists.txt @@ -14,7 +14,6 @@ add_subdirectory(pnIni) add_subdirectory(pnIniExe) add_subdirectory(pnInputCore) add_subdirectory(pnKeyedObject) -add_subdirectory(pnMail) add_subdirectory(pnMessage) add_subdirectory(pnModifier) add_subdirectory(pnNetBase) diff --git a/Sources/Plasma/NucleusLib/pnMail/CMakeLists.txt b/Sources/Plasma/NucleusLib/pnMail/CMakeLists.txt deleted file mode 100644 index cf961192..00000000 --- a/Sources/Plasma/NucleusLib/pnMail/CMakeLists.txt +++ /dev/null @@ -1,16 +0,0 @@ -include_directories("../../CoreLib") -include_directories("../../NucleusLib") - -set(pnMail_HEADERS - Pch.h - pnMail.h -) - -set(pnMail_SOURCES - pnMail.cpp -) - -add_library(pnMail STATIC ${pnMail_HEADERS} ${pnMail_SOURCES}) - -source_group("Header Files" FILES ${pnMail_HEADERS}) -source_group("Source Files" FILES ${pnMail_SOURCES}) diff --git a/Sources/Plasma/NucleusLib/pnMail/Pch.h b/Sources/Plasma/NucleusLib/pnMail/Pch.h deleted file mode 100644 index 0dd1c50a..00000000 --- a/Sources/Plasma/NucleusLib/pnMail/Pch.h +++ /dev/null @@ -1,60 +0,0 @@ -/*==LICENSE==* - -CyanWorlds.com Engine - MMOG client, server and tools -Copyright (C) 2011 Cyan Worlds, Inc. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -Additional permissions under GNU GPL version 3 section 7 - -If you modify this Program, or any covered work, by linking or -combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, -NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent -JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK -(or a modified version of those libraries), -containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, -PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG -JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the -licensors of this Program grant you additional -permission to convey the resulting work. Corresponding Source for a -non-source form of such a combination shall include the source code for -the parts of OpenSSL and IJG JPEG Library used as well as that of the covered -work. - -You can contact Cyan Worlds, Inc. by email legal@cyan.com - or by snail mail at: - Cyan Worlds, Inc. - 14617 N Newport Hwy - Mead, WA 99021 - -*==LICENSE==*/ -/***************************************************************************** -* -* $/Plasma20/Sources/Plasma/NucleusLib/pnMail/Pch.h -* -***/ - -#ifdef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNMAIL_PCH_H -#error "Header $/Plasma20/Sources/Plasma/NucleusLib/pnMail/Pch.h included more than once" -#endif -#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNMAIL_PCH_H - - -#include "pnUtils/pnUtils.h" -#include "pnNetBase/pnNetBase.h" -#include "pnAsyncCore/pnAsyncCore.h" - -#include "pnMail.h" - -#include diff --git a/Sources/Plasma/NucleusLib/pnMail/pnMail.cpp b/Sources/Plasma/NucleusLib/pnMail/pnMail.cpp deleted file mode 100644 index bed2d193..00000000 --- a/Sources/Plasma/NucleusLib/pnMail/pnMail.cpp +++ /dev/null @@ -1,726 +0,0 @@ -/*==LICENSE==* - -CyanWorlds.com Engine - MMOG client, server and tools -Copyright (C) 2011 Cyan Worlds, Inc. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -Additional permissions under GNU GPL version 3 section 7 - -If you modify this Program, or any covered work, by linking or -combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, -NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent -JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK -(or a modified version of those libraries), -containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, -PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG -JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the -licensors of this Program grant you additional -permission to convey the resulting work. Corresponding Source for a -non-source form of such a combination shall include the source code for -the parts of OpenSSL and IJG JPEG Library used as well as that of the covered -work. - -You can contact Cyan Worlds, Inc. by email legal@cyan.com - or by snail mail at: - Cyan Worlds, Inc. - 14617 N Newport Hwy - Mead, WA 99021 - -*==LICENSE==*/ -/***************************************************************************** -* -* $/Plasma20/Sources/Plasma/NucleusLib/pnMail/pnMail.cpp -* -***/ - -#include "Pch.h" -#pragma hdrstop - - -/***************************************************************************** -* -* Private -* -***/ - -enum EMailStep { - kMailStepConnect, // wait for 220, then send "helo" command - kMailStepAuth, // wait for 250, then send "AUTH PLAIN " - kMailStepSender, // wait for 235/250, then send "mail from:" command - kMailStepRecipient, // wait for 250, then send "rcpt to:" command - kMailStepStartLetter, // wait for 250, then send "data" command - kMailStepLetter, // wait for 354, then send letter - kMailStepQuit, // wait for 250, then send "quit" command - kMailStepDisconnect, // wait for 221, then disconnect -}; - - -struct MailTransaction { - LINK(MailTransaction) link; - AsyncSocket sock; - const char ** stepTable; - EMailStep step; - unsigned subStep; - EMailError error; - FMailResult callback; - void * param; - - char * smtp; - char * sender; - char * recipient; - char * replyTo; - char * subject; - char * bodyEncoding; - char * body; - char * auth; - char buffer[1]; -}; - -static bool MailNotifyProc ( - AsyncSocket sock, - EAsyncNotifySocket code, - AsyncNotifySocket * notify, - void ** userState -); - -static void CDECL Send ( - AsyncSocket sock, - const char str[], - ... -); - - -/***************************************************************************** -* -* Private data -* -***/ - -static bool s_shutdown; -static CCritSect s_critsect; -static LISTDECL(MailTransaction, link) s_mail; - - -//=========================================================================== -// Authenticated email sequence -// -> "220 catherine.cyan.com ESMTP\r\n" -// <- "HELO cyan.com\r\n" -// -> "250 catherine.cyan.com\r\n" -// <- "AUTH PLAIN XXXXXXXXX\r\n" -// -> "235 go ahead\r\n" -// <- "MAIL FROM:\r\n" -// -> "250 ok mail from accepted\r\n" -// <- "RCPT TO:\r\n" -// -> "250 ok recipient accepted\r\n" -// <- "DATA\r\n" -// -> "354 ok, go ahead:\r\n" -// -> + "\r\n.\r\n" -// -> "250 message accepted for delivery\r\n" -// <- "QUIT\r\n" -// -> "221 catherine.cyan.com\r\n" -//=========================================================================== -static const char * s_waitStrAuth[] = { - "220 ", // kMailStepConnect - "250 ", // kMailStepAuth - "235 ", // kMailStepSender - "250 ", // kMailStepRecipient - "250 ", // kMailStepStartLetter - "354 ", // kMailStepLetter - "250 ", // kMailStepQuit - "221 ", // kMailStepDisconnect -}; - -//=========================================================================== -// Unauthenticated email seqeunce -// -> "220 catherine.cyan.com ESMTP\r\n" -// <- "HELO cyan.com\r\n" -// -> "250 catherine.cyan.com\r\n" -// <- "MAIL FROM:\r\n" -// -> "250 ok mail from accepted\r\n" -// <- "RCPT TO:\r\n" -// -> "250 ok recipient accepted\r\n" -// <- "DATA\r\n" -// -> "354 ok, go ahead:\r\n" -// -> + "\r\n.\r\n" -// -> "250 message accepted for delivery\r\n" -// <- "QUIT\r\n" -// -> "221 catherine.cyan.com\r\n" -//=========================================================================== -static const char * s_waitStrNoAuth[] = { - "220 ", // kMailStepConnect - nil, // kMailStepAuth - "250 ", // kMailStepSender - "250 ", // kMailStepRecipient - "250 ", // kMailStepStartLetter - "354 ", // kMailStepLetter - "250 ", // kMailStepQuit - "221 ", // kMailStepDisconnect -}; - - - -/***************************************************************************** -* -* Internal functions -* -***/ - -//=========================================================================== -static bool AdvanceStep ( - MailTransaction * transaction, - AsyncSocket sock -) { - switch (transaction->step) { - case kMailStepConnect: { - const char * host = transaction->sender; - const char * separator = StrChr(host, '@'); - if (separator) - host = separator + 1; - Send(sock, "helo ", host, "\r\n", nil); - transaction->step = kMailStepSender; - - if (transaction->auth[0]) - transaction->step = kMailStepAuth; - } - break; - - case kMailStepAuth: - Send(sock, "AUTH PLAIN ", transaction->auth, "\r\n", nil); - transaction->step = kMailStepSender; - break; - - case kMailStepSender: - Send(sock, "mail from:<", transaction->sender, ">\r\n", nil); - transaction->step = kMailStepRecipient; - break; - - case kMailStepRecipient: { - const char * start = transaction->recipient + transaction->subStep; - while (*start == ' ') - ++start; - const char * term = StrChr(start, ';'); - if (term) { - char * buffer = (char*)malloc(term + 1 - start); - StrCopy(buffer, start, term + 1 - start); - Send(sock, "rcpt to:<", buffer, ">\r\n", nil); - transaction->subStep = term + 1 - transaction->recipient; - - free(buffer); - } - else { - Send(sock, "rcpt to:<", start, ">\r\n", nil); - transaction->step = kMailStepStartLetter; - transaction->subStep = 0; - } - } - break; - - case kMailStepStartLetter: - Send(sock, "data\r\n", nil); - transaction->step = kMailStepLetter; - break; - - case kMailStepLetter: - if (transaction->replyTo[0]) { - Send( - sock, - "Reply-to: ", - transaction->replyTo, - "\r\n", - nil - ); - } - if (transaction->bodyEncoding) { - Send( - sock, - "From: ", - transaction->sender, - "\r\nTo: ", - transaction->recipient, - "\r\nSubject: ", - transaction->subject, - "\r\nContent-Type: text/plain; charset=", - transaction->bodyEncoding, - "\r\n\r\n", - transaction->body, - "\r\n.\r\n", - nil - ); - } - else { - Send( - sock, - "From: ", - transaction->sender, - "\r\nTo: ", - transaction->recipient, - "\r\nSubject: ", - transaction->subject, - "\r\n\r\n", - transaction->body, - "\r\n.\r\n", - nil - ); - } - transaction->step = kMailStepQuit; - break; - - case kMailStepQuit: - Send(sock, "quit\r\n", nil); - transaction->step = kMailStepDisconnect; - break; - - case kMailStepDisconnect: - return false; - - DEFAULT_FATAL(transaction->step); - } - - return true; -} - -//=========================================================================== -static bool NotifyRead ( - AsyncSocket sock, - AsyncNotifySocketRead * read, - MailTransaction * transaction -) { - - // Parse available lines looking for an acknowledgement of last command - const char * compareStr = transaction->stepTable[transaction->step]; - unsigned compareLen = StrLen(compareStr); - unsigned offset = 0; - for (;;) { - const char * source = (const char *)&read->buffer[offset]; - - // Search for an end-of-line marker - const char * eol = StrChr(source, '\n', read->bytes - offset); - if (!eol) - break; - offset += (eol + 1 - source); - - // Search for an acknowledgement - if (!StrCmp(source, compareStr, compareLen)) { - read->bytesProcessed = offset; - return AdvanceStep(transaction, sock); - } - - // An error was received; log it and bail - LogMsg( - kLogError, - "Mail: step %u error '%.*s'", - transaction->step, - eol - source - 1, - source - ); - transaction->error = kMailErrServerError; - return false; - } - - // We did not find an acknowledgement, so skip past fully-received lines - // and wait for more data to arrive - read->bytesProcessed = offset; - return true; - -} - -//=========================================================================== -static void DestroyTransaction (MailTransaction * transaction) { - - // Remove transaction from list so that it can - // be safely deleted outside the critical section - s_critsect.Enter(); - { - s_mail.Unlink(transaction); - } - s_critsect.Leave(); - - // Perform callback if requested - if (transaction->callback) { - transaction->callback( - transaction->param, - transaction->error - ); - } - - delete transaction; -} - -//=========================================================================== -static void MailLookupProc ( - void * param, - const wchar_t * , - unsigned addrCount, - const NetAddress addrs[] -) { - - // If no address was found, cancel the transaction - MailTransaction * transaction = (MailTransaction *) param; - if (!addrCount) { - LogMsg(kLogError,"Mail: failed to resolve %s", transaction->smtp); - transaction->error = kMailErrDnsFailed; - DestroyTransaction(transaction); - return; - } - - // Initiate a connection - AsyncCancelId cancelId; - AsyncSocketConnect( - &cancelId, - addrs[0], - MailNotifyProc, - transaction - ); - -} - -//=========================================================================== -static bool MailNotifyProc ( - AsyncSocket sock, - EAsyncNotifySocket code, - AsyncNotifySocket * notify, - void ** userState -) { - switch (code) { - case kNotifySocketConnectFailed: { - MailTransaction * transaction = (MailTransaction *)notify->param; - LogMsg(kLogError, "Mail: unable to connect to %s", transaction->smtp); - transaction->error = kMailErrConnectFailed; - DestroyTransaction(transaction); - } - break; - - case kNotifySocketConnectSuccess: { - MailTransaction * transaction = (MailTransaction *) notify->param; - *userState = notify->param; - transaction->sock = sock; - } - break; - - case kNotifySocketRead: { - MailTransaction * transaction = (MailTransaction *) *userState; - return NotifyRead(sock, (AsyncNotifySocketRead *) notify, transaction); - } - break; - - case kNotifySocketDisconnect: { - MailTransaction * transaction = (MailTransaction *) *userState; - if ((transaction->step != kMailStepDisconnect) && !transaction->error) { - transaction->error = kMailErrDisconnected; - LogMsg(kLogError, "Mail: unexpected disconnection from %s", transaction->smtp); - } - DestroyTransaction(transaction); - AsyncSocketDelete(sock); - } - break; - } - - return !s_shutdown; -} - -//=========================================================================== -static void CDECL Send ( - AsyncSocket sock, - const char str[], - ... -) { - // Count bytes - unsigned bytes = 1; - { - va_list argList; - va_start(argList, str); - for (const char * source = str; source; source = va_arg(argList, const char *)) - bytes += StrLen(source); - va_end(argList); - } - - // Allocate string buffer - char* packed = (char *) malloc(bytes); - - // Pack the string - { - va_list argList; - va_start(argList, str); - char * dest = packed; - for (const char * source = str; source; source = va_arg(argList, const char *)) - dest += StrCopyLen(dest, source, packed + bytes - dest); - va_end(argList); - } - - // Send the string - AsyncSocketSend(sock, packed, bytes - 1); - - // Free the string - free(packed); -} - -//=========================================================================== -static void IMail ( - const char * stepTable[], - const char smtp[], - const char sender[], - const char recipient[], - const char replyTo[], - const char subject[], - const char body[], - const char auth[], - EMailEncoding bodyEncoding, - FMailResult callback, - void * param -) { - static const char * utf8 = "\"utf-8\""; - const char * encodingStr; - - if (bodyEncoding == kMailEncodeUtf8) - encodingStr = utf8; - else - encodingStr = ""; - - // Calculate string lengths - unsigned lenSmtp = StrLen(smtp); - unsigned lenSender = StrLen(sender); - unsigned lenRecipient = StrLen(recipient); - unsigned lenReplyTo = StrLen(replyTo); - unsigned lenSubject = StrLen(subject); - unsigned lenBodyEncoding = StrLen(encodingStr); - unsigned lenBody = StrLen(body); - unsigned lenAuth = StrLen(auth); - - // Calculate the required buffer size for all strings - unsigned bytes = ( - lenSmtp + 1 + - lenSender + 1 + - lenRecipient + 1 + - lenReplyTo + 1 + - lenSubject + 1 + - lenBody + 1 + - lenAuth + 1 - ) * sizeof(char); - - if (lenBodyEncoding) - bytes += (lenBodyEncoding + 1) * sizeof(char); - - // Create a transaction record - MailTransaction * transaction = new( - malloc(offsetof(MailTransaction, buffer) + bytes) - ) MailTransaction; - transaction->stepTable = stepTable; - transaction->sock = nil; - transaction->step = kMailStepConnect; - transaction->subStep = 0; - transaction->error = kMailSuccess; - transaction->callback = callback; - transaction->param = param; - - unsigned offset = 0; - transaction->smtp = transaction->buffer + offset; - offset += StrCopyLen(transaction->smtp, smtp, lenSmtp + 1) + 1; - transaction->sender = transaction->buffer + offset; - offset += StrCopyLen(transaction->sender, sender, lenSender + 1) + 1; - transaction->recipient = transaction->buffer + offset; - offset += StrCopyLen(transaction->recipient, recipient, lenRecipient + 1) + 1; - transaction->replyTo = transaction->buffer + offset; - offset += StrCopyLen(transaction->replyTo, replyTo, lenReplyTo + 1) + 1; - transaction->subject = transaction->buffer + offset; - offset += StrCopyLen(transaction->subject, subject, lenSubject + 1) + 1; - if (lenBodyEncoding) { - transaction->bodyEncoding = transaction->buffer + offset; - offset += StrCopyLen(transaction->bodyEncoding, encodingStr, lenBodyEncoding + 1) + 1; - } - else { - transaction->bodyEncoding = nil; - } - transaction->body = transaction->buffer + offset; - offset += StrCopyLen(transaction->body, body, lenBody + 1) + 1; - transaction->auth = transaction->buffer + offset; - offset += StrCopyLen(transaction->auth, auth, lenAuth + 1) + 1; - ASSERT(offset == bytes); - - // Start the transaction with a dns lookup - const unsigned kSmtpPort = 25; - wchar_t smtpName[256]; - StrToUnicode(smtpName, smtp, arrsize(smtpName)); - - // Add transaction to global list - bool shutdown; - s_critsect.Enter(); - { - shutdown = s_shutdown; - s_mail.Link(transaction); - } - s_critsect.Leave(); - - if (shutdown) { - DestroyTransaction(transaction); - } - else { - NetAddress addr; - if (NetAddressFromString(&addr, smtpName, kSmtpPort)) { - AsyncCancelId cancelId; - AsyncSocketConnect( - &cancelId, - addr, - MailNotifyProc, - transaction - ); - } - else { - AsyncCancelId cancelId; - AsyncAddressLookupName( - &cancelId, - MailLookupProc, - smtpName, - kSmtpPort, - transaction - ); - } - } -} - -/**************************************************************************** -* -* Exported functions -* -***/ - -//=========================================================================== -void MailEncodePassword ( - const char username[], - const char password[], - ARRAY(char) * emailAuth -) { - // base64_encode("\0#{user}\0#{secret}") - emailAuth->Reserve(512); - emailAuth->Push(0); - emailAuth->Add(username, StrBytes(username)); - emailAuth->Add(password, StrBytes(password)); - unsigned srcChars = emailAuth->Bytes(); - - // Allocate space for encoded data - unsigned dstChars = Base64EncodeSize(srcChars); - char * dstData = emailAuth->New(dstChars); - - // Encode data and move it back to the front of the array - dstChars = Base64Encode( - srcChars, - (const uint8_t *) emailAuth->Ptr(), - dstChars, - dstData - ); - emailAuth->Move( - 0, - srcChars, - dstChars - ); - emailAuth->SetCountFewer(dstChars); -} - -//=========================================================================== -void Mail ( - const char smtp[], - const char sender[], - const char recipient[], // multiple recipients separated by semicolons - const char subject[], - const char body[], - const char username[], - const char password[], - const char replyTo[], - EMailEncoding bodyEncoding, - FMailResult callback, - void * param -) { - s_shutdown = false; - - // Get email authorization - const char * auth; - const char ** stepTable; - ARRAY(char) authBuffer; - if (!password || !*password) { - // No password is specified, use non-authenticated email - auth = ""; - stepTable = s_waitStrNoAuth; - } - else if (!username || !*username) { - // No username specified, user is providing the base64 encoded secret - auth = password; - stepTable = s_waitStrAuth; - } - else { - MailEncodePassword(username, password, &authBuffer); - auth = authBuffer.Ptr(); - stepTable = s_waitStrAuth; - } - - IMail( - stepTable, - smtp, - sender, - recipient, - replyTo ? replyTo : "", - subject, - body, - auth, - bodyEncoding, - callback, - param - ); -} - -//=========================================================================== -void MailStop () { - s_critsect.Enter(); - { - s_shutdown = true; - MailTransaction * transaction = s_mail.Head(); - for (; transaction; transaction = s_mail.Next(transaction)) { - if (transaction->sock) - AsyncSocketDisconnect(transaction->sock, true); - transaction->error = kMailErrClientCanceled; - } - } - s_critsect.Leave(); - - AsyncAddressLookupCancel( - MailLookupProc, - 0 // cancel all - ); - AsyncSocketConnectCancel( - MailNotifyProc, - 0 // cancel all - ); -} - -//=========================================================================== -bool MailQueued () { - bool queued; - s_critsect.Enter(); - queued = s_mail.Head() != nil; - s_critsect.Leave(); - return queued; -} - -//============================================================================ -const wchar_t * MailErrorToString (EMailError error) { - - switch (error) { - case kMailSuccess: return L"kMailSuccess"; - case kMailErrDnsFailed: return L"kMailErrDnsFailed"; - case kMailErrConnectFailed: return L"kMailErrConnectFailed"; - case kMailErrDisconnected: return L"kMailErrDisconnected"; - case kMailErrClientCanceled: return L"kMailErrClientCanceled"; - case kMailErrServerError: return L"kMailErrServerError"; - DEFAULT_FATAL(error); - } -} diff --git a/Sources/Plasma/NucleusLib/pnMail/pnMail.h b/Sources/Plasma/NucleusLib/pnMail/pnMail.h deleted file mode 100644 index 278d1dd4..00000000 --- a/Sources/Plasma/NucleusLib/pnMail/pnMail.h +++ /dev/null @@ -1,112 +0,0 @@ -/*==LICENSE==* - -CyanWorlds.com Engine - MMOG client, server and tools -Copyright (C) 2011 Cyan Worlds, Inc. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -Additional permissions under GNU GPL version 3 section 7 - -If you modify this Program, or any covered work, by linking or -combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, -NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent -JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK -(or a modified version of those libraries), -containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, -PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG -JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the -licensors of this Program grant you additional -permission to convey the resulting work. Corresponding Source for a -non-source form of such a combination shall include the source code for -the parts of OpenSSL and IJG JPEG Library used as well as that of the covered -work. - -You can contact Cyan Worlds, Inc. by email legal@cyan.com - or by snail mail at: - Cyan Worlds, Inc. - 14617 N Newport Hwy - Mead, WA 99021 - -*==LICENSE==*/ -/***************************************************************************** -* -* $/Plasma20/Sources/Plasma/NucleusLib/pnMail/pnMail.h -* -***/ - -#ifndef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNMAIL_PNMAIL_H -#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNMAIL_PNMAIL_H - - -/***************************************************************************** -* -* Mail API -* -***/ - -enum EMailEncoding { - kMailEncodeNone, - kMailEncodeAscii, - kMailEncodeUtf8, -}; - -enum EMailError { - kMailSuccess, - kMailErrDnsFailed, - kMailErrConnectFailed, - kMailErrDisconnected, - kMailErrClientCanceled, - kMailErrServerError, -}; - - -typedef void (* FMailResult)(void * param, EMailError result); - - -void MailStop (); -bool MailQueued (); - -const wchar_t * MailErrorToString (EMailError error); - - -//============================================================================ -// AUTHENTICATION NOTES -// username, password -// NULL NULL --> no authentication -// NULL string --> username/password assumed to be pre-encoded with MailEncodePassword -// string string --> username/password contain appropriate values for snmp server -//============================================================================ - -void Mail ( - const char smtp[], - const char sender[], - const char recipients[], // separate multiple recipients with semicolons - const char subject[], - const char body[], - const char username[], // optional (see auth notes above) - const char password[], // optional (see auth notes above) - const char replyTo[], // optional - EMailEncoding encoding, - FMailResult callback, // optional - void * param // optional -); - -void MailEncodePassword ( - const char username[], - const char password[], - ARRAY(char) * emailAuth -); - - -#endif // PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNMAIL_PNMAIL_H