aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/abstract/MCMessageConstants.h387
-rw-r--r--src/core/basetypes/MCConnectionLogger.h15
-rw-r--r--src/core/basetypes/MCConnectionLoggerUtils.cc19
-rw-r--r--src/core/basetypes/MCHTMLCleaner.cc1
-rw-r--r--src/core/basetypes/MCLibetpan.cpp16
-rw-r--r--src/core/basetypes/MCLibetpan.h14
-rw-r--r--src/core/basetypes/MCObject.cc4
-rw-r--r--src/core/basetypes/MCOperationQueue.cc4
-rw-r--r--src/core/basetypes/MCOperationQueueCallback.h4
-rw-r--r--src/core/basetypes/MCString.cc54
-rw-r--r--src/core/imap/MCIMAPSession.cc24
-rw-r--r--src/core/imap/MCIMAPSession.h6
-rw-r--r--src/core/pop/MCPOPSession.cc5
-rw-r--r--src/core/provider/MCMailProvider.cc108
-rw-r--r--src/core/provider/MCMailProvider.h4
-rw-r--r--src/core/provider/MCNetService.cc62
-rw-r--r--src/core/provider/MCNetService.h53
-rw-r--r--src/core/smtp/MCSMTPSession.cc7
18 files changed, 461 insertions, 326 deletions
diff --git a/src/core/abstract/MCMessageConstants.h b/src/core/abstract/MCMessageConstants.h
index 417bdb6c..9e1b46b7 100644
--- a/src/core/abstract/MCMessageConstants.h
+++ b/src/core/abstract/MCMessageConstants.h
@@ -4,214 +4,215 @@
#ifdef __cplusplus
namespace mailcore {
-
- enum ConnectionType {
- ConnectionTypeClear = 1 << 0,
- ConnectionTypeStartTLS = 1 << 1,
- ConnectionTypeTLS = 1 << 2,
- };
+
+ enum ConnectionType {
+ ConnectionTypeClear = 1 << 0,
+ ConnectionTypeStartTLS = 1 << 1,
+ ConnectionTypeTLS = 1 << 2,
+ };
- enum AuthType {
- AuthTypeSASLNone = 0,
- AuthTypeSASLCRAMMD5 = 1 << 0,
- AuthTypeSASLPlain = 1 << 1,
- AuthTypeSASLGSSAPI = 1 << 2,
- AuthTypeSASLDIGESTMD5 = 1 << 3,
- AuthTypeSASLLogin = 1 << 4,
- AuthTypeSASLSRP = 1 << 5,
- AuthTypeSASLNTLM = 1 << 6,
- AuthTypeSASLKerberosV4 = 1 << 7,
- };
+ enum AuthType {
+ AuthTypeSASLNone = 0,
+ AuthTypeSASLCRAMMD5 = 1 << 0,
+ AuthTypeSASLPlain = 1 << 1,
+ AuthTypeSASLGSSAPI = 1 << 2,
+ AuthTypeSASLDIGESTMD5 = 1 << 3,
+ AuthTypeSASLLogin = 1 << 4,
+ AuthTypeSASLSRP = 1 << 5,
+ AuthTypeSASLNTLM = 1 << 6,
+ AuthTypeSASLKerberosV4 = 1 << 7,
+ AuthTypeXOAuth2 = 1 << 8,
+ };
- enum IMAPFolderFlag {
- IMAPFolderFlagNone = 0,
- IMAPFolderFlagMarked = 1 << 0,
- IMAPFolderFlagUnmarked = 1 << 1,
- IMAPFolderFlagNoSelect = 1 << 2,
- IMAPFolderFlagNoInferiors = 1 << 3,
- IMAPFolderFlagInbox = 1 << 4,
- IMAPFolderFlagSentMail = 1 << 5,
- IMAPFolderFlagStarred = 1 << 6,
- IMAPFolderFlagAllMail = 1 << 7,
- IMAPFolderFlagTrash = 1 << 8,
- IMAPFolderFlagDrafts = 1 << 9,
- IMAPFolderFlagSpam = 1 << 10,
- IMAPFolderFlagImportant = 1 << 11,
- IMAPFolderFlagArchive = 1 << 12,
+ enum IMAPFolderFlag {
+ IMAPFolderFlagNone = 0,
+ IMAPFolderFlagMarked = 1 << 0,
+ IMAPFolderFlagUnmarked = 1 << 1,
+ IMAPFolderFlagNoSelect = 1 << 2,
+ IMAPFolderFlagNoInferiors = 1 << 3,
+ IMAPFolderFlagInbox = 1 << 4,
+ IMAPFolderFlagSentMail = 1 << 5,
+ IMAPFolderFlagStarred = 1 << 6,
+ IMAPFolderFlagAllMail = 1 << 7,
+ IMAPFolderFlagTrash = 1 << 8,
+ IMAPFolderFlagDrafts = 1 << 9,
+ IMAPFolderFlagSpam = 1 << 10,
+ IMAPFolderFlagImportant = 1 << 11,
+ IMAPFolderFlagArchive = 1 << 12,
IMAPFolderFlagAll = IMAPFolderFlagAllMail,
IMAPFolderFlagJunk = IMAPFolderFlagSpam,
IMAPFolderFlagFlagged = IMAPFolderFlagStarred,
- };
+ };
- enum MessageFlag {
- MessageFlagNone = 0,
- MessageFlagSeen = 1 << 0,
- MessageFlagAnswered = 1 << 1,
- MessageFlagFlagged = 1 << 2,
- MessageFlagDeleted = 1 << 3,
- MessageFlagDraft = 1 << 4,
- MessageFlagMDNSent = 1 << 5,
- MessageFlagForwarded = 1 << 6,
- MessageFlagSubmitPending = 1 << 7,
- MessageFlagSubmitted = 1 << 8,
- } ;
+ enum MessageFlag {
+ MessageFlagNone = 0,
+ MessageFlagSeen = 1 << 0,
+ MessageFlagAnswered = 1 << 1,
+ MessageFlagFlagged = 1 << 2,
+ MessageFlagDeleted = 1 << 3,
+ MessageFlagDraft = 1 << 4,
+ MessageFlagMDNSent = 1 << 5,
+ MessageFlagForwarded = 1 << 6,
+ MessageFlagSubmitPending = 1 << 7,
+ MessageFlagSubmitted = 1 << 8,
+ } ;
- enum IMAPMessagesRequestKind {
- IMAPMessagesRequestKindUid = 0, // This is the default and it's always fetched
- IMAPMessagesRequestKindFlags = 1 << 0,
- IMAPMessagesRequestKindHeaders = 1 << 1,
- IMAPMessagesRequestKindStructure = 1 << 2,
- IMAPMessagesRequestKindInternalDate = 1 << 3,
- IMAPMessagesRequestKindFullHeaders = 1 << 4,
- IMAPMessagesRequestKindHeaderSubject = 1 << 5,
- IMAPMessagesRequestKindGmailLabels = 1 << 6,
- IMAPMessagesRequestKindGmailMessageID = 1 << 7,
- IMAPMessagesRequestKindGmailThreadID = 1 << 8,
- };
+ enum IMAPMessagesRequestKind {
+ IMAPMessagesRequestKindUid = 0, // This is the default and it's always fetched
+ IMAPMessagesRequestKindFlags = 1 << 0,
+ IMAPMessagesRequestKindHeaders = 1 << 1,
+ IMAPMessagesRequestKindStructure = 1 << 2,
+ IMAPMessagesRequestKindInternalDate = 1 << 3,
+ IMAPMessagesRequestKindFullHeaders = 1 << 4,
+ IMAPMessagesRequestKindHeaderSubject = 1 << 5,
+ IMAPMessagesRequestKindGmailLabels = 1 << 6,
+ IMAPMessagesRequestKindGmailMessageID = 1 << 7,
+ IMAPMessagesRequestKindGmailThreadID = 1 << 8,
+ };
- enum IMAPFetchRequestType {
- IMAPFetchRequestTypeUID = 0,
- IMAPFetchRequestTypeSequence = 1
- };
+ enum IMAPFetchRequestType {
+ IMAPFetchRequestTypeUID = 0,
+ IMAPFetchRequestTypeSequence = 1
+ };
- enum IMAPStoreFlagsRequestKind {
- IMAPStoreFlagsRequestKindAdd,
- IMAPStoreFlagsRequestKindRemove,
- IMAPStoreFlagsRequestKindSet,
- };
+ enum IMAPStoreFlagsRequestKind {
+ IMAPStoreFlagsRequestKindAdd,
+ IMAPStoreFlagsRequestKindRemove,
+ IMAPStoreFlagsRequestKindSet,
+ };
- enum IMAPWorkaround {
- IMAPWorkaroundGmail = 1 << 0,
- IMAPWorkaroundYahoo = 1 << 1,
- IMAPWorkaroundExchange2003 = 1 << 2,
- };
+ enum IMAPWorkaround {
+ IMAPWorkaroundGmail = 1 << 0,
+ IMAPWorkaroundYahoo = 1 << 1,
+ IMAPWorkaroundExchange2003 = 1 << 2,
+ };
- enum IMAPCapability {
- IMAPCapabilityACL,
- IMAPCapabilityBinary,
- IMAPCapabilityCatenate,
- IMAPCapabilityChildren,
- IMAPCapabilityCompressDeflate,
- IMAPCapabilityCondstore,
- IMAPCapabilityEnable,
- IMAPCapabilityIdle,
- IMAPCapabilityId,
- IMAPCapabilityLiteralPlus,
- IMAPCapabilityMultiAppend,
- IMAPCapabilityNamespace,
- IMAPCapabilityQResync,
- IMAPCapabilityQuota,
- IMAPCapabilitySort,
- IMAPCapabilityStartTLS,
- IMAPCapabilityThreadOrderedSubject,
- IMAPCapabilityThreadReferences,
- IMAPCapabilityUIDPlus,
- IMAPCapabilityUnselect,
- IMAPCapabilityXList,
- IMAPCapabilityAuthAnonymous,
- IMAPCapabilityAuthCRAMMD5,
- IMAPCapabilityAuthDigestMD5,
- IMAPCapabilityAuthExternal,
- IMAPCapabilityAuthGSSAPI,
- IMAPCapabilityAuthKerberosV4,
- IMAPCapabilityAuthLogin,
- IMAPCapabilityAuthNTLM,
- IMAPCapabilityAuthOTP,
- IMAPCapabilityAuthPlain,
- IMAPCapabilityAuthSKey,
- IMAPCapabilityAuthSRP,
- };
+ enum IMAPCapability {
+ IMAPCapabilityACL,
+ IMAPCapabilityBinary,
+ IMAPCapabilityCatenate,
+ IMAPCapabilityChildren,
+ IMAPCapabilityCompressDeflate,
+ IMAPCapabilityCondstore,
+ IMAPCapabilityEnable,
+ IMAPCapabilityIdle,
+ IMAPCapabilityId,
+ IMAPCapabilityLiteralPlus,
+ IMAPCapabilityMultiAppend,
+ IMAPCapabilityNamespace,
+ IMAPCapabilityQResync,
+ IMAPCapabilityQuota,
+ IMAPCapabilitySort,
+ IMAPCapabilityStartTLS,
+ IMAPCapabilityThreadOrderedSubject,
+ IMAPCapabilityThreadReferences,
+ IMAPCapabilityUIDPlus,
+ IMAPCapabilityUnselect,
+ IMAPCapabilityXList,
+ IMAPCapabilityAuthAnonymous,
+ IMAPCapabilityAuthCRAMMD5,
+ IMAPCapabilityAuthDigestMD5,
+ IMAPCapabilityAuthExternal,
+ IMAPCapabilityAuthGSSAPI,
+ IMAPCapabilityAuthKerberosV4,
+ IMAPCapabilityAuthLogin,
+ IMAPCapabilityAuthNTLM,
+ IMAPCapabilityAuthOTP,
+ IMAPCapabilityAuthPlain,
+ IMAPCapabilityAuthSKey,
+ IMAPCapabilityAuthSRP,
+ };
- enum POPCapability {
- POPCapabilityNone,
- POPCapabilityStartTLS,
- POPCapabilityTop,
- POPCapabilityUser,
- POPCapabilityRespCodes,
- POPCapabilityPipelining,
- POPCapabilityUIDL,
- POPCapabilitySASL,
- POPCapabilityAuthAnonymous,
- POPCapabilityAuthCRAMMD5,
- POPCapabilityAuthDigestMD5,
- POPCapabilityAuthExternal,
- POPCapabilityAuthGSSAPI,
- POPCapabilityAuthKerberosV4,
- POPCapabilityAuthLogin,
- POPCapabilityAuthNTLM,
- POPCapabilityAuthOTP,
- POPCapabilityAuthPlain,
- POPCapabilityAuthSKey,
- POPCapabilityAuthSRP,
- };
+ enum POPCapability {
+ POPCapabilityNone,
+ POPCapabilityStartTLS,
+ POPCapabilityTop,
+ POPCapabilityUser,
+ POPCapabilityRespCodes,
+ POPCapabilityPipelining,
+ POPCapabilityUIDL,
+ POPCapabilitySASL,
+ POPCapabilityAuthAnonymous,
+ POPCapabilityAuthCRAMMD5,
+ POPCapabilityAuthDigestMD5,
+ POPCapabilityAuthExternal,
+ POPCapabilityAuthGSSAPI,
+ POPCapabilityAuthKerberosV4,
+ POPCapabilityAuthLogin,
+ POPCapabilityAuthNTLM,
+ POPCapabilityAuthOTP,
+ POPCapabilityAuthPlain,
+ POPCapabilityAuthSKey,
+ POPCapabilityAuthSRP,
+ };
- enum Encoding {
- Encoding7Bit = 0, // should match MAILIMAP_BODY_FLD_ENC_7BIT
- Encoding8Bit = 1, // should match MAILIMAP_BODY_FLD_ENC_8BIT
- EncodingBinary = 2, // should match MAILIMAP_BODY_FLD_ENC_BINARY
- EncodingBase64 = 3, // should match MAILIMAP_BODY_FLD_ENC_BASE64
- EncodingQuotedPrintable = 4, // should match MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE
- EncodingOther = 5, // should match MAILIMAP_BODY_FLD_ENC_OTHER
- // negative values should be used for other encoding
- EncodingUUEncode = -1
- };
-
- enum IMAPSearchKind {
- IMAPSearchKindNone,
- IMAPSearchKindFrom,
- IMAPSearchKindRecipient,
- IMAPSearchKindSubject,
- IMAPSearchKindContent,
- IMAPSearchKindHeader,
- IMAPSearchKindOr,
- IMAPSearchKindAnd,
- };
-
- enum ErrorCode {
- ErrorNone,
- ErrorConnection,
- ErrorTLSNotAvailable,
- ErrorParse,
- ErrorCertificate,
- ErrorAuthentication,
- ErrorGmailIMAPNotEnabled,
- ErrorGmailExceededBandwidthLimit,
- ErrorGmailTooManySimultaneousConnections,
- ErrorMobileMeMoved,
- ErrorYahooUnavailable,
- ErrorNonExistantFolder,
- ErrorRename,
- ErrorDelete,
- ErrorCreate,
- ErrorSubscribe,
- ErrorAppend,
- ErrorCopy,
- ErrorExpunge,
- ErrorFetch,
- ErrorIdle,
- ErrorIdentity,
- ErrorNamespace,
- ErrorStore,
+ enum Encoding {
+ Encoding7Bit = 0, // should match MAILIMAP_BODY_FLD_ENC_7BIT
+ Encoding8Bit = 1, // should match MAILIMAP_BODY_FLD_ENC_8BIT
+ EncodingBinary = 2, // should match MAILIMAP_BODY_FLD_ENC_BINARY
+ EncodingBase64 = 3, // should match MAILIMAP_BODY_FLD_ENC_BASE64
+ EncodingQuotedPrintable = 4, // should match MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE
+ EncodingOther = 5, // should match MAILIMAP_BODY_FLD_ENC_OTHER
+ // negative values should be used for other encoding
+ EncodingUUEncode = -1
+ };
+
+ enum IMAPSearchKind {
+ IMAPSearchKindNone,
+ IMAPSearchKindFrom,
+ IMAPSearchKindRecipient,
+ IMAPSearchKindSubject,
+ IMAPSearchKindContent,
+ IMAPSearchKindHeader,
+ IMAPSearchKindOr,
+ IMAPSearchKindAnd,
+ };
+
+ enum ErrorCode {
+ ErrorNone,
+ ErrorConnection,
+ ErrorTLSNotAvailable,
+ ErrorParse,
+ ErrorCertificate,
+ ErrorAuthentication,
+ ErrorGmailIMAPNotEnabled,
+ ErrorGmailExceededBandwidthLimit,
+ ErrorGmailTooManySimultaneousConnections,
+ ErrorMobileMeMoved,
+ ErrorYahooUnavailable,
+ ErrorNonExistantFolder,
+ ErrorRename,
+ ErrorDelete,
+ ErrorCreate,
+ ErrorSubscribe,
+ ErrorAppend,
+ ErrorCopy,
+ ErrorExpunge,
+ ErrorFetch,
+ ErrorIdle,
+ ErrorIdentity,
+ ErrorNamespace,
+ ErrorStore,
ErrorCapability,
- ErrorStartTLSNotAvailable,
- ErrorSendMessageIllegalAttachment,
- ErrorStorageLimit,
- ErrorSendMessageNotAllowed,
- ErrorNeedsConnectToWebmail,
- ErrorSendMessage,
- ErrorAuthenticationRequired,
- ErrorFetchMessageList,
- ErrorDeleteMessage,
+ ErrorStartTLSNotAvailable,
+ ErrorSendMessageIllegalAttachment,
+ ErrorStorageLimit,
+ ErrorSendMessageNotAllowed,
+ ErrorNeedsConnectToWebmail,
+ ErrorSendMessage,
+ ErrorAuthenticationRequired,
+ ErrorFetchMessageList,
+ ErrorDeleteMessage,
ErrorInvalidAccount,
- };
-
- enum PartType {
- PartTypeSingle,
- PartTypeMessage,
- PartTypeMultipartMixed,
- PartTypeMultipartRelated,
- PartTypeMultipartAlternative,
- };
+ };
+
+ enum PartType {
+ PartTypeSingle,
+ PartTypeMessage,
+ PartTypeMultipartMixed,
+ PartTypeMultipartRelated,
+ PartTypeMultipartAlternative,
+ };
}
#endif
diff --git a/src/core/basetypes/MCConnectionLogger.h b/src/core/basetypes/MCConnectionLogger.h
index 8083d12d..dd596857 100644
--- a/src/core/basetypes/MCConnectionLogger.h
+++ b/src/core/basetypes/MCConnectionLogger.h
@@ -9,6 +9,8 @@
#ifndef __MAILCORE_CONNECTION_LOGGER_H_
#define __MAILCORE_CONNECTION_LOGGER_H_
+#include <stdlib.h>
+
#ifdef __cplusplus
namespace mailcore {
@@ -17,20 +19,23 @@ namespace mailcore {
class String;
enum ConnectionLogType {
- ConnectionLogTypeGeneric,
+ // Received data
ConnectionLogTypeReceived,
+ // Sent data
ConnectionLogTypeSent,
+ // Sent private data
ConnectionLogTypeSentPrivate,
- ConnectionLogTypeErrorGeneric,
+ // Parse error
+ ConnectionLogTypeErrorParse,
+ // Error while receiving data - log() is called with a NULL buffer.
ConnectionLogTypeErrorReceived,
+ // Error while sending data - log() is called with a NULL buffer.
ConnectionLogTypeErrorSent,
- ConnectionLogTypeErrorSentPrivate,
};
class ConnectionLogger {
public:
- virtual void logBuffer(ConnectionLogType logType, Data * buffer) {}
- virtual void logString(ConnectionLogType logType, String * log) {}
+ virtual void log(void * sender, ConnectionLogType logType, Data * buffer) {}
};
}
diff --git a/src/core/basetypes/MCConnectionLoggerUtils.cc b/src/core/basetypes/MCConnectionLoggerUtils.cc
index 669c8449..234713e7 100644
--- a/src/core/basetypes/MCConnectionLoggerUtils.cc
+++ b/src/core/basetypes/MCConnectionLoggerUtils.cc
@@ -14,21 +14,12 @@
mailcore::ConnectionLogType mailcore::getConnectionType(int log_type)
{
- ConnectionLogType type = ConnectionLogTypeGeneric;
+ ConnectionLogType type = (ConnectionLogType) -1;
bool isBuffer = false;
switch (log_type) {
- case MAILSTREAM_LOG_TYPE_INFO_GENERIC:
- type = ConnectionLogTypeGeneric;
- break;
- case MAILSTREAM_LOG_TYPE_INFO_RECEIVED:
- type = ConnectionLogTypeReceived;
- break;
- case MAILSTREAM_LOG_TYPE_INFO_SENT:
- type = ConnectionLogTypeSent;
- break;
- case MAILSTREAM_LOG_TYPE_ERROR_GENERIC:
- type = ConnectionLogTypeErrorGeneric;
+ case MAILSTREAM_LOG_TYPE_ERROR_PARSE:
+ type = ConnectionLogTypeErrorParse;
isBuffer = true;
break;
case MAILSTREAM_LOG_TYPE_ERROR_RECEIVED:
@@ -60,9 +51,7 @@ bool mailcore::isBufferFromLogType(int log_type)
bool isBuffer = false;
switch (log_type) {
- case MAILSTREAM_LOG_TYPE_ERROR_GENERIC:
- case MAILSTREAM_LOG_TYPE_ERROR_RECEIVED:
- case MAILSTREAM_LOG_TYPE_ERROR_SENT:
+ case MAILSTREAM_LOG_TYPE_ERROR_PARSE:
case MAILSTREAM_LOG_TYPE_DATA_RECEIVED:
case MAILSTREAM_LOG_TYPE_DATA_SENT:
case MAILSTREAM_LOG_TYPE_DATA_SENT_PRIVATE:
diff --git a/src/core/basetypes/MCHTMLCleaner.cc b/src/core/basetypes/MCHTMLCleaner.cc
index 12f1371e..7d45d3f2 100644
--- a/src/core/basetypes/MCHTMLCleaner.cc
+++ b/src/core/basetypes/MCHTMLCleaner.cc
@@ -68,6 +68,7 @@ String * HTMLCleaner::cleanHTML(String * input)
String * result = String::stringWithUTF8Characters((const char *) output.bp);
+ tidyBufFree(&docbuf);
tidyBufFree(&output);
tidyBufFree(&errbuf);
tidyRelease(tdoc);
diff --git a/src/core/basetypes/MCLibetpan.cpp b/src/core/basetypes/MCLibetpan.cpp
new file mode 100644
index 00000000..c8258cc2
--- /dev/null
+++ b/src/core/basetypes/MCLibetpan.cpp
@@ -0,0 +1,16 @@
+//
+// MCLibetpan.cpp
+// mailcore2
+//
+// Created by Hoa Dinh on 6/28/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#include "MCLibetpan.h"
+
+#include <libetpan/libetpan.h>
+
+__attribute__((constructor))
+static void initialize() {
+ mailstream_cfstream_enabled = 1;
+}
diff --git a/src/core/basetypes/MCLibetpan.h b/src/core/basetypes/MCLibetpan.h
new file mode 100644
index 00000000..ef7db1f8
--- /dev/null
+++ b/src/core/basetypes/MCLibetpan.h
@@ -0,0 +1,14 @@
+//
+// MCLibetpan.h
+// mailcore2
+//
+// Created by Hoa Dinh on 6/28/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#ifndef __MAILCORE_MCLIBETPAN_H_
+#define __MAILCORE_MCLIBETPAN_H_
+
+// No API in this file.
+
+#endif
diff --git a/src/core/basetypes/MCObject.cc b/src/core/basetypes/MCObject.cc
index 879c194f..235738cd 100644
--- a/src/core/basetypes/MCObject.cc
+++ b/src/core/basetypes/MCObject.cc
@@ -83,7 +83,9 @@ String * Object::className()
{
int status;
char * unmangled = abi::__cxa_demangle(typeid(* this).name(), NULL, NULL, &status);
- return mailcore::String::uniquedStringWithUTF8Characters(unmangled);
+ String * result = String::uniquedStringWithUTF8Characters(unmangled);
+ free(unmangled);
+ return result;
}
String * Object::description()
diff --git a/src/core/basetypes/MCOperationQueue.cc b/src/core/basetypes/MCOperationQueue.cc
index d4529fab..9c30ad22 100644
--- a/src/core/basetypes/MCOperationQueue.cc
+++ b/src/core/basetypes/MCOperationQueue.cc
@@ -159,7 +159,7 @@ void OperationQueue::stoppedOnMainThread(void * context)
mStarted = false;
if (mCallback) {
- mCallback->queueStoppedRunning();
+ mCallback->queueStoppedRunning(this);
}
release(); // (2)
@@ -173,7 +173,7 @@ void OperationQueue::startThread()
return;
if (mCallback) {
- mCallback->queueStartRunning();
+ mCallback->queueStartRunning(this);
}
retain(); // (3)
diff --git a/src/core/basetypes/MCOperationQueueCallback.h b/src/core/basetypes/MCOperationQueueCallback.h
index 367888bb..605de030 100644
--- a/src/core/basetypes/MCOperationQueueCallback.h
+++ b/src/core/basetypes/MCOperationQueueCallback.h
@@ -15,8 +15,8 @@ namespace mailcore {
class OperationQueueCallback {
public:
- virtual void queueStartRunning() {}
- virtual void queueStoppedRunning() {}
+ virtual void queueStartRunning(OperationQueue * queue) {}
+ virtual void queueStoppedRunning(OperationQueue * queue) {}
};
}
diff --git a/src/core/basetypes/MCString.cc b/src/core/basetypes/MCString.cc
index 832ffac2..034e3299 100644
--- a/src/core/basetypes/MCString.cc
+++ b/src/core/basetypes/MCString.cc
@@ -10,6 +10,9 @@
#include <libetpan/libetpan.h>
#include <libxml/xmlmemory.h>
#include <libxml/HTMLparser.h>
+#if __APPLE__
+#include <CoreFoundation/CoreFoundation.h>
+#endif
#include "MCData.h"
#include "MCHash.h"
@@ -781,7 +784,9 @@ String * String::stringWithVUTF8Format(const char * format, va_list ap)
{
char * result;
vasprintf(&result, format, ap);
- return stringWithUTF8Characters(result);
+ String * str = stringWithUTF8Characters(result);
+ free(result);
+ return str;
}
String * String::stringWithUTF8Characters(const char * UTF8Characters)
@@ -1121,6 +1126,20 @@ String * String::uppercaseString()
void String::appendBytes(const char * bytes, unsigned int length, const char * charset)
{
+#if __APPLE__
+ CFStringRef encodingName = CFStringCreateWithCString(NULL, charset, kCFStringEncodingUTF8);
+ CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding(encodingName);
+ CFStringRef cfStr = CFStringCreateWithBytes(NULL, (const UInt8 *) bytes, (CFIndex) length, encoding, false);
+ if (cfStr != NULL) {
+ CFDataRef data = CFStringCreateExternalRepresentation(NULL, cfStr, kCFStringEncodingUTF16LE, '_');
+ if (data != NULL) {
+ appendCharactersLength((const UChar *) CFDataGetBytePtr(data), (unsigned int) CFDataGetLength(data) / 2);
+ CFRelease(data);
+ }
+ CFRelease(cfStr);
+ }
+ CFRelease(encodingName);
+#else
UErrorCode err;
err = U_ZERO_ERROR;
@@ -1150,6 +1169,7 @@ void String::appendBytes(const char * bytes, unsigned int length, const char * c
free(dest);
ucnv_close(converter);
+#endif
}
String * String::extractedSubject()
@@ -1773,7 +1793,7 @@ String * String::flattenHTML()
bool String::hasSuffix(String * suffix)
{
- if (mLength > suffix->mLength) {
+ if (mLength >= suffix->mLength) {
if (u_memcmp(suffix->mUnicodeChars + (mLength - suffix->mLength),
mUnicodeChars, suffix->mLength) == 0) {
return true;
@@ -1784,7 +1804,7 @@ bool String::hasSuffix(String * suffix)
bool String::hasPrefix(String * prefix)
{
- if (mLength > prefix->mLength) {
+ if (mLength >= prefix->mLength) {
if (u_memcmp(prefix->mUnicodeChars, mUnicodeChars, prefix->mLength) == 0) {
return true;
}
@@ -1810,13 +1830,34 @@ String * String::pathExtension()
Data * String::dataUsingEncoding(const char * charset)
{
- UErrorCode err;
- Data * data;
-
if (charset == NULL) {
charset = "utf-8";
}
+#if __APPLE__
+ Data * data;
+
+ data = NULL;
+ CFStringRef encodingName = CFStringCreateWithCString(NULL, charset, kCFStringEncodingUTF8);
+ CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding(encodingName);
+ CFStringRef cfStr = CFStringCreateWithBytes(NULL, (const UInt8 *) mUnicodeChars,
+ (CFIndex) mLength * sizeof(* mUnicodeChars), kCFStringEncodingUTF16LE, false);
+ if (cfStr != NULL) {
+ CFDataRef cfData = CFStringCreateExternalRepresentation(NULL, cfStr, encoding, '_');
+ if (cfData != NULL) {
+ data = Data::dataWithBytes((const char *) CFDataGetBytePtr(cfData),
+ (unsigned int) CFDataGetLength(cfData));
+ CFRelease(cfData);
+ }
+ CFRelease(cfStr);
+ }
+ CFRelease(encodingName);
+
+ return data;
+#else
+ UErrorCode err;
+ Data * data;
+
err = U_ZERO_ERROR;
UConverter * converter = ucnv_open(charset, &err);
if (converter == NULL) {
@@ -1846,6 +1887,7 @@ Data * String::dataUsingEncoding(const char * charset)
ucnv_close(converter);
return data;
+#endif
}
const char * String::fileSystemRepresentation()
diff --git a/src/core/imap/MCIMAPSession.cc b/src/core/imap/MCIMAPSession.cc
index c3327872..125cae2f 100644
--- a/src/core/imap/MCIMAPSession.cc
+++ b/src/core/imap/MCIMAPSession.cc
@@ -317,6 +317,7 @@ void IMAPSession::init()
mPort = 0;
mUsername = NULL;
mPassword = NULL;
+ mOAuth2Token = NULL;
mAuthType = AuthTypeSASLNone;
mConnectionType = ConnectionTypeClear;
mCheckCertificateEnabled = true;
@@ -359,6 +360,7 @@ IMAPSession::~IMAPSession()
MC_SAFE_RELEASE(mHostname);
MC_SAFE_RELEASE(mUsername);
MC_SAFE_RELEASE(mPassword);
+ MC_SAFE_RELEASE(mOAuth2Token);
MC_SAFE_RELEASE(mWelcomeString);
MC_SAFE_RELEASE(mDefaultNamespace);
MC_SAFE_RELEASE(mCurrentFolder);
@@ -405,6 +407,16 @@ String * IMAPSession::password()
return mPassword;
}
+void IMAPSession::setOAuth2Token(String * token)
+{
+ MC_SAFE_REPLACE_COPY(String, mOAuth2Token, token);
+}
+
+String * IMAPSession::OAuth2Token()
+{
+ return mOAuth2Token;
+}
+
void IMAPSession::setAuthType(AuthType authType)
{
mAuthType = authType;
@@ -502,15 +514,17 @@ static void logger(mailimap * imap, int log_type, const char * buffer, size_t si
return;
ConnectionLogType type = getConnectionType(log_type);
+ if ((int) type == -1)
+ return;
+
bool isBuffer = isBufferFromLogType(log_type);
if (isBuffer) {
Data * data = Data::dataWithBytes(buffer, (unsigned int) size);
- session->connectionLogger()->logBuffer(type, data);
+ session->connectionLogger()->log(session, type, data);
}
else {
- Data * data = Data::dataWithBytes(buffer, (unsigned int) size);
- session->connectionLogger()->logString(type, String::stringWithData(data));
+ session->connectionLogger()->log(session, type, NULL);
}
}
@@ -748,6 +762,10 @@ void IMAPSession::login(ErrorCode * pError)
utf8username, utf8username,
utf8password, NULL/* realm */);
break;
+
+ case AuthTypeXOAuth2:
+ r = mailimap_oauth2_authenticate(mImap, MCUTF8(mUsername), MCUTF8(mOAuth2Token));
+ break;
}
if (r == MAILIMAP_ERROR_STREAM) {
* pError = ErrorConnection;
diff --git a/src/core/imap/MCIMAPSession.h b/src/core/imap/MCIMAPSession.h
index 757613e8..53510b0b 100644
--- a/src/core/imap/MCIMAPSession.h
+++ b/src/core/imap/MCIMAPSession.h
@@ -38,6 +38,11 @@ namespace mailcore {
virtual void setPassword(String * password);
virtual String * password();
+ // To authenticate using OAuth2, username and oauth2token should be set.
+ // auth type to use is AuthTypeOAuth2.
+ virtual void setOAuth2Token(String * token);
+ virtual String * OAuth2Token();
+
virtual void setAuthType(AuthType authType);
virtual AuthType authType();
@@ -154,6 +159,7 @@ namespace mailcore {
unsigned int mPort;
String * mUsername;
String * mPassword;
+ String * mOAuth2Token;
AuthType mAuthType;
ConnectionType mConnectionType;
bool mCheckCertificateEnabled;
diff --git a/src/core/pop/MCPOPSession.cc b/src/core/pop/MCPOPSession.cc
index fe15c500..fea4e5e0 100644
--- a/src/core/pop/MCPOPSession.cc
+++ b/src/core/pop/MCPOPSession.cc
@@ -160,11 +160,10 @@ static void logger(mailpop3 * pop3, int log_type, const char * buffer, size_t si
if (isBuffer) {
Data * data = Data::dataWithBytes(buffer, (unsigned int) size);
- session->connectionLogger()->logBuffer(type, data);
+ session->connectionLogger()->log(session, type, data);
}
else {
- Data * data = Data::dataWithBytes(buffer, (unsigned int) size);
- session->connectionLogger()->logString(type, String::stringWithData(data));
+ session->connectionLogger()->log(session, type, NULL);
}
}
diff --git a/src/core/provider/MCMailProvider.cc b/src/core/provider/MCMailProvider.cc
index b814e2ea..43fd94f9 100644
--- a/src/core/provider/MCMailProvider.cc
+++ b/src/core/provider/MCMailProvider.cc
@@ -18,7 +18,7 @@ using namespace mailcore;
void MailProvider::init()
{
mIdentifier = NULL;
- mImapServices = new Array();
+ mImapServices = new Array();
mSmtpServices = new Array();
mPopServices = new Array();
mDomainMatch = new Array();
@@ -31,15 +31,27 @@ MailProvider::MailProvider()
init();
}
+MailProvider::MailProvider(MailProvider * other)
+{
+ init();
+ MC_SAFE_REPLACE_COPY(String, mIdentifier, other->mIdentifier);
+ MC_SAFE_REPLACE_COPY(Array, mImapServices, other->mImapServices);
+ MC_SAFE_REPLACE_COPY(Array, mSmtpServices, other->mSmtpServices);
+ MC_SAFE_REPLACE_COPY(Array, mPopServices, other->mPopServices);
+ MC_SAFE_REPLACE_COPY(Array, mDomainMatch, other->mDomainMatch);
+ MC_SAFE_REPLACE_COPY(Set, mMxSet, other->mMxSet);
+ MC_SAFE_REPLACE_COPY(HashMap, mMailboxPaths, other->mMailboxPaths);
+}
+
MailProvider::~MailProvider()
{
- MC_SAFE_RELEASE(mImapServices);
- MC_SAFE_RELEASE(mSmtpServices);
- MC_SAFE_RELEASE(mPopServices);
- MC_SAFE_RELEASE(mMxSet);
- MC_SAFE_RELEASE(mDomainMatch);
- MC_SAFE_RELEASE(mMailboxPaths);
- MC_SAFE_RELEASE(mIdentifier);
+ MC_SAFE_RELEASE(mImapServices);
+ MC_SAFE_RELEASE(mSmtpServices);
+ MC_SAFE_RELEASE(mPopServices);
+ MC_SAFE_RELEASE(mMxSet);
+ MC_SAFE_RELEASE(mDomainMatch);
+ MC_SAFE_RELEASE(mMailboxPaths);
+ MC_SAFE_RELEASE(mIdentifier);
}
MailProvider * MailProvider::providerWithInfo(HashMap * info)
@@ -52,7 +64,7 @@ MailProvider * MailProvider::providerWithInfo(HashMap * info)
void MailProvider::fillWithInfo(HashMap * info)
{
- Array * imapInfos;
+ Array * imapInfos;
Array * smtpInfos;
Array * popInfos;
HashMap * serverInfo;
@@ -68,9 +80,9 @@ void MailProvider::fillWithInfo(HashMap * info)
}
mxs = (Array *) info->objectForKey(MCSTR("mx"));
mMxSet->removeAllObjects();
- mc_foreacharray(String, mx, mxs) {
- mMxSet->addObject(mx->lowercaseString());
- }
+ mc_foreacharray(String, mx, mxs) {
+ mMxSet->addObject(mx->lowercaseString());
+ }
serverInfo = (HashMap *) info->objectForKey(MCSTR("servers"));
imapInfos = (Array *) serverInfo->objectForKey(MCSTR("imap"));
@@ -78,52 +90,52 @@ void MailProvider::fillWithInfo(HashMap * info)
popInfos = (Array *) serverInfo->objectForKey(MCSTR("pop"));
mImapServices->removeAllObjects();
- mc_foreacharray(HashMap, imapInfo, imapInfos) {
- NetService * service = NetService::serviceWithInfo(imapInfo);
+ mc_foreacharray(HashMap, imapInfo, imapInfos) {
+ NetService * service = NetService::serviceWithInfo(imapInfo);
mImapServices->addObject(service);
- }
-
+ }
+
mSmtpServices->removeAllObjects();
- mc_foreacharray(HashMap, smtpInfo, smtpInfos) {
- NetService * service = NetService::serviceWithInfo(smtpInfo);
- mSmtpServices->addObject(service);
- }
-
+ mc_foreacharray(HashMap, smtpInfo, smtpInfos) {
+ NetService * service = NetService::serviceWithInfo(smtpInfo);
+ mSmtpServices->addObject(service);
+ }
+
mPopServices->removeAllObjects();
- mc_foreacharray(HashMap, popInfo, popInfos) {
- NetService * service = NetService::serviceWithInfo(popInfo);
- mPopServices->addObject(service);
- }
+ mc_foreacharray(HashMap, popInfo, popInfos) {
+ NetService * service = NetService::serviceWithInfo(popInfo);
+ mPopServices->addObject(service);
+ }
}
void MailProvider::setIdentifier(String * identifier)
{
- MC_SAFE_REPLACE_COPY(String, mIdentifier, identifier);
+ MC_SAFE_REPLACE_COPY(String, mIdentifier, identifier);
}
String * MailProvider::identifier()
{
- return mIdentifier;
+ return mIdentifier;
}
Array * MailProvider::imapServices()
{
- return mImapServices;
+ return mImapServices;
}
Array * MailProvider::smtpServices()
{
- return mSmtpServices;
+ return mSmtpServices;
}
Array * MailProvider::popServices()
{
- return mPopServices;
+ return mPopServices;
}
bool MailProvider::matchEmail(String * email)
{
- Array * components;
+ Array * components;
String * domain;
const char * cDomain;
@@ -133,9 +145,9 @@ bool MailProvider::matchEmail(String * email)
domain = (String *) components->lastObject();
cDomain = domain->UTF8Characters();
-
- mc_foreacharray(String, match, mDomainMatch) {
- regex_t r;
+
+ mc_foreacharray(String, match, mDomainMatch) {
+ regex_t r;
bool matched;
match = String::stringWithUTF8Format("^%s$", match->UTF8Characters());
@@ -151,14 +163,14 @@ bool MailProvider::matchEmail(String * email)
if (matched)
return true;
- }
+ }
return false;
}
bool MailProvider::matchMX(String * hostname)
{
- return mMxSet->containsObject(hostname->lowercaseString());
+ return mMxSet->containsObject(hostname->lowercaseString());
}
String * MailProvider::sentMailFolderPath()
@@ -168,38 +180,38 @@ String * MailProvider::sentMailFolderPath()
String * MailProvider::starredFolderPath()
{
- return (String *) mMailboxPaths->objectForKey(MCSTR("starred"));
+ return (String *) mMailboxPaths->objectForKey(MCSTR("starred"));
}
String * MailProvider::allMailFolderPath()
{
- return (String *) mMailboxPaths->objectForKey(MCSTR("allmail"));
+ return (String *) mMailboxPaths->objectForKey(MCSTR("allmail"));
}
String * MailProvider::trashFolderPath()
{
- return (String *) mMailboxPaths->objectForKey(MCSTR("trash"));
+ return (String *) mMailboxPaths->objectForKey(MCSTR("trash"));
}
String * MailProvider::draftsFolderPath()
{
- return (String *) mMailboxPaths->objectForKey(MCSTR("drafts"));
+ return (String *) mMailboxPaths->objectForKey(MCSTR("drafts"));
}
String * MailProvider::spamFolderPath()
{
- return (String *) mMailboxPaths->objectForKey(MCSTR("spam"));
+ return (String *) mMailboxPaths->objectForKey(MCSTR("spam"));
}
String * MailProvider::importantFolderPath()
{
- return (String *) mMailboxPaths->objectForKey(MCSTR("important"));
+ return (String *) mMailboxPaths->objectForKey(MCSTR("important"));
}
bool MailProvider::isMainFolder(String * folderPath, String * prefix)
{
- mc_foreachdictionaryValue(String, path, mMailboxPaths) {
- String * fullPath;
+ mc_foreachdictionaryValue(String, path, mMailboxPaths) {
+ String * fullPath;
if (prefix != NULL) {
fullPath = prefix->stringByAppendingString((String *) path);
@@ -210,7 +222,7 @@ bool MailProvider::isMainFolder(String * folderPath, String * prefix)
if (fullPath->isEqual(folderPath))
return true;
- }
+ }
return false;
}
@@ -219,3 +231,9 @@ String * MailProvider::description()
{
return String::stringWithUTF8Format("<%s:%p, %s>", className()->UTF8Characters(), this, MCUTF8(mIdentifier));
}
+
+Object * MailProvider::copy()
+{
+ return new MailProvider(this);
+}
+
diff --git a/src/core/provider/MCMailProvider.h b/src/core/provider/MCMailProvider.h
index 306b180d..81b816e9 100644
--- a/src/core/provider/MCMailProvider.h
+++ b/src/core/provider/MCMailProvider.h
@@ -45,8 +45,10 @@ namespace mailcore {
virtual bool isMainFolder(String * folderPath, String * prefix);
public: // subclass behavior
+ MailProvider(MailProvider * other);
virtual String * description();
-
+ virtual Object * copy();
+
public: // private
virtual void setIdentifier(String * identifier);
virtual void fillWithInfo(HashMap * info);
diff --git a/src/core/provider/MCNetService.cc b/src/core/provider/MCNetService.cc
index 53ae7475..f760dc61 100644
--- a/src/core/provider/MCNetService.cc
+++ b/src/core/provider/MCNetService.cc
@@ -19,12 +19,20 @@ void NetService::init()
NetService::NetService()
{
- init();
+ init();
+}
+
+NetService::NetService(NetService * other)
+{
+ init();
+ MC_SAFE_REPLACE_COPY(String, mHostname, other->mHostname);
+ mPort = other->mPort;
+ mConnectionType = other->mConnectionType;
}
NetService::~NetService()
{
- MC_SAFE_RELEASE(mHostname);
+ MC_SAFE_RELEASE(mHostname);
}
NetService * NetService::serviceWithInfo(HashMap * info)
@@ -37,10 +45,10 @@ NetService * NetService::serviceWithInfo(HashMap * info)
void NetService::fillWithInfo(HashMap * info)
{
- bool ssl = false;
+ bool ssl = false;
bool starttls = false;
-
- setHostname((String *) info->objectForKey(MCSTR("hostname")));
+
+ setHostname((String *) info->objectForKey(MCSTR("hostname")));
if (info->objectForKey(MCSTR("port")) != NULL) {
setPort(((Value *) info->objectForKey(MCSTR("port")))->intValue());
}
@@ -68,57 +76,57 @@ void NetService::setHostname(String *hostname)
String * NetService::hostname()
{
- return mHostname;
+ return mHostname;
}
void NetService::setPort(unsigned int port)
{
- mPort = port;
+ mPort = port;
}
unsigned int NetService::port()
{
- return mPort;
+ return mPort;
}
void NetService::setConnectionType(ConnectionType connectionType)
{
- mConnectionType = connectionType;
+ mConnectionType = connectionType;
}
ConnectionType NetService::connectionType()
{
- return mConnectionType;
+ return mConnectionType;
}
String * NetService::normalizedHostnameWithEmail(String * email)
{
- Array *components = email->componentsSeparatedByString(MCSTR("@"));
- String *hostname = (String *) mHostname->copy();
- if (components->count() != 0) {
- hostname->replaceOccurrencesOfString(MCSTR("{domain}"), (String *) components->lastObject());
- return hostname;
- }
- return mHostname;
+ Array *components = email->componentsSeparatedByString(MCSTR("@"));
+ String *hostname = (String *) mHostname->copy();
+ if (components->count() != 0) {
+ hostname->replaceOccurrencesOfString(MCSTR("{domain}"), (String *) components->lastObject());
+ return hostname;
+ }
+ return mHostname;
}
HashMap * NetService::info()
{
- HashMap * result;
+ HashMap * result;
result = new HashMap();
if (mHostname != NULL) {
- result->setObjectForKey(MCSTR("hostname"), mHostname);
+ result->setObjectForKey(MCSTR("hostname"), mHostname);
}
if (mPort != 0) {
- result->setObjectForKey(MCSTR("port"), Value::valueWithIntValue(mPort));
+ result->setObjectForKey(MCSTR("port"), Value::valueWithIntValue(mPort));
}
switch (mConnectionType) {
case ConnectionTypeTLS:
- result->setObjectForKey(MCSTR("ssl"), Value::valueWithBoolValue(true));
+ result->setObjectForKey(MCSTR("ssl"), Value::valueWithBoolValue(true));
break;
case ConnectionTypeStartTLS:
- result->setObjectForKey(MCSTR("starttls"), Value::valueWithBoolValue(true));
+ result->setObjectForKey(MCSTR("starttls"), Value::valueWithBoolValue(true));
break;
default:
break;
@@ -126,3 +134,13 @@ HashMap * NetService::info()
return result;
}
+
+String * NetService::description()
+{
+ return String::stringWithUTF8Format("<%s:%p, hostname: %s, port: %u>", className()->UTF8Characters(), this, MCUTF8(mHostname), mPort);
+}
+
+Object * NetService::copy()
+{
+ return new NetService(this);
+}
diff --git a/src/core/provider/MCNetService.h b/src/core/provider/MCNetService.h
index 7b0b9e14..d3aa5dd7 100644
--- a/src/core/provider/MCNetService.h
+++ b/src/core/provider/MCNetService.h
@@ -15,35 +15,40 @@
#ifdef __cplusplus
namespace mailcore {
- class NetService : public Object {
-
- public:
- NetService();
- virtual ~NetService();
-
- virtual void setHostname(String * hostname);
- virtual String * hostname();
-
- virtual void setPort(unsigned int port);
- virtual unsigned int port();
-
- virtual void setConnectionType(ConnectionType connectionType);
- virtual ConnectionType connectionType();
-
- virtual String * normalizedHostnameWithEmail(String * email);
+ class NetService : public Object {
+
+ public:
+ NetService();
+ virtual ~NetService();
+
+ virtual void setHostname(String * hostname);
+ virtual String * hostname();
+
+ virtual void setPort(unsigned int port);
+ virtual unsigned int port();
+
+ virtual void setConnectionType(ConnectionType connectionType);
+ virtual ConnectionType connectionType();
+
+ virtual String * normalizedHostnameWithEmail(String * email);
public: // serialization
static NetService * serviceWithInfo(HashMap * info);
- virtual HashMap * info();
+ virtual HashMap * info();
+
+ public: //subclass behavior
+ NetService(NetService * other);
+ virtual String * description();
+ virtual Object * copy();
+
+ private:
+ String * mHostname;
+ unsigned int mPort;
+ ConnectionType mConnectionType;
- private:
- String * mHostname;
- unsigned int mPort;
- ConnectionType mConnectionType;
-
- void init();
+ void init();
void fillWithInfo(HashMap * info);
- };
+ };
}
#endif
diff --git a/src/core/smtp/MCSMTPSession.cc b/src/core/smtp/MCSMTPSession.cc
index e74a540a..dcbad71e 100644
--- a/src/core/smtp/MCSMTPSession.cc
+++ b/src/core/smtp/MCSMTPSession.cc
@@ -164,7 +164,7 @@ void SMTPSession::bodyProgress(unsigned int current, unsigned int maximum)
}
-static void logger(mailsmtp * pop3, int log_type, const char * buffer, size_t size, void * context)
+static void logger(mailsmtp * smtp, int log_type, const char * buffer, size_t size, void * context)
{
SMTPSession * session = (SMTPSession *) context;
@@ -176,11 +176,10 @@ static void logger(mailsmtp * pop3, int log_type, const char * buffer, size_t si
if (isBuffer) {
Data * data = Data::dataWithBytes(buffer, (unsigned int) size);
- session->connectionLogger()->logBuffer(type, data);
+ session->connectionLogger()->log(session, type, data);
}
else {
- Data * data = Data::dataWithBytes(buffer, (unsigned int) size);
- session->connectionLogger()->logString(type, String::stringWithData(data));
+ session->connectionLogger()->log(session, type, NULL);
}
}