diff options
-rwxr-xr-x | src/async/imap/MCIMAPAsyncConnection.cc | 7 | ||||
-rwxr-xr-x | src/async/imap/MCIMAPAsyncConnection.h | 7 | ||||
-rwxr-xr-x | src/async/imap/MCIMAPAsyncSession.cc | 13 | ||||
-rwxr-xr-x | src/async/imap/MCIMAPAsyncSession.h | 9 | ||||
-rw-r--r-- | src/async/imap/MCIMAPFetchFoldersOperation.cc | 4 | ||||
-rw-r--r-- | src/async/imap/MCIMAPFetchFoldersOperation.h | 2 | ||||
-rw-r--r-- | src/async/imap/MCIMAPOperation.cc | 3 | ||||
-rwxr-xr-x | src/core/imap/MCIMAPSession.cc | 163 | ||||
-rwxr-xr-x | src/core/imap/MCIMAPSession.h | 16 | ||||
-rw-r--r-- | src/objc/abstract/MCOConstants.h | 2 | ||||
-rwxr-xr-x | src/objc/imap/MCOIMAPSession.h | 2 | ||||
-rwxr-xr-x | src/objc/imap/MCOIMAPSession.mm | 2 |
12 files changed, 153 insertions, 77 deletions
diff --git a/src/async/imap/MCIMAPAsyncConnection.cc b/src/async/imap/MCIMAPAsyncConnection.cc index 5993302e..789147e2 100755 --- a/src/async/imap/MCIMAPAsyncConnection.cc +++ b/src/async/imap/MCIMAPAsyncConnection.cc @@ -86,7 +86,7 @@ IMAPAsyncConnection::IMAPAsyncConnection() mSession = new IMAPSession(); mQueue = new OperationQueue(); mDefaultNamespace = NULL; - mDelimiter = 0; + //mDelimiter = 0; mLastFolder = NULL; mQueueCallback = new IMAPOperationQueueCallback(this); mQueue->setCallback(mQueueCallback); @@ -209,6 +209,7 @@ bool IMAPAsyncConnection::isVoIPEnabled() return mSession->isVoIPEnabled(); } +#if 0 void IMAPAsyncConnection::setDelimiter(char delimiter) { mSession->setDelimiter(delimiter); @@ -219,6 +220,7 @@ char IMAPAsyncConnection::delimiter() { return mDelimiter; } +#endif void IMAPAsyncConnection::setDefaultNamespace(IMAPNamespace * ns) { @@ -644,8 +646,7 @@ IMAPMessageRenderingOperation * IMAPAsyncConnection::plainTextBodyRenderingOpera void IMAPAsyncConnection::setAutomaticConfigurationEnabled(bool enabled) { mAutomaticConfigurationEnabled = enabled; - mSession->setAutomaticCapabilitiesEnabled(enabled); - mSession->setAutomaticNamespaceEnabled(enabled); + mSession->setAutomaticConfigurationEnabled(enabled); } bool IMAPAsyncConnection::isAutomaticConfigurationEnabled() diff --git a/src/async/imap/MCIMAPAsyncConnection.h b/src/async/imap/MCIMAPAsyncConnection.h index d2cdbcaa..720bd9c6 100755 --- a/src/async/imap/MCIMAPAsyncConnection.h +++ b/src/async/imap/MCIMAPAsyncConnection.h @@ -67,12 +67,13 @@ namespace mailcore { virtual void setVoIPEnabled(bool enabled); virtual bool isVoIPEnabled(); - virtual void setDelimiter(char delimiter); - virtual char delimiter(); + //virtual void setDelimiter(char delimiter); + //virtual char delimiter(); virtual void setAutomaticConfigurationEnabled(bool enabled); virtual bool isAutomaticConfigurationEnabled(); + // Needs to be run before starting a connection. virtual void setDefaultNamespace(IMAPNamespace * ns); virtual IMAPNamespace * defaultNamespace(); @@ -135,7 +136,7 @@ namespace mailcore { private: IMAPSession * mSession; OperationQueue * mQueue; - char mDelimiter; + //char mDelimiter; IMAPNamespace * mDefaultNamespace; String * mLastFolder; IMAPOperationQueueCallback * mQueueCallback; diff --git a/src/async/imap/MCIMAPAsyncSession.cc b/src/async/imap/MCIMAPAsyncSession.cc index 48e96004..b9cb5615 100755 --- a/src/async/imap/MCIMAPAsyncSession.cc +++ b/src/async/imap/MCIMAPAsyncSession.cc @@ -12,6 +12,7 @@ #include "MCIMAPNamespace.h" #include "MCOperationQueueCallback.h" #include "MCConnectionLogger.h" +#include "MCIMAPSession.h" #define DEFAULT_MAX_CONNECTIONS 3 @@ -32,7 +33,7 @@ IMAPAsyncSession::IMAPAsyncSession() mConnectionType = ConnectionTypeClear; mCheckCertificateEnabled = true; mVoIPEnabled = true; - mDelimiter = 0; + //mDelimiter = 0; mDefaultNamespace = NULL; mTimeout = 30.; mConnectionLogger = NULL; @@ -149,7 +150,7 @@ bool IMAPAsyncSession::isVoIPEnabled() return mVoIPEnabled; } - +#if 0 void IMAPAsyncSession::setDelimiter(char delimiter) { mDelimiter = delimiter; @@ -159,6 +160,7 @@ char IMAPAsyncSession::delimiter() { return mDelimiter; } +#endif IMAPNamespace * IMAPAsyncSession::defaultNamespace() { @@ -207,11 +209,13 @@ IMAPAsyncConnection * IMAPAsyncSession::session() session->setTimeout(mTimeout); session->setCheckCertificateEnabled(mCheckCertificateEnabled); session->setVoIPEnabled(mVoIPEnabled); - session->setDelimiter(mDelimiter); + //session->setDelimiter(mDelimiter); session->setDefaultNamespace(mDefaultNamespace); +#if 0 // should be implemented properly if (mAutomaticConfigurationDone) { session->setAutomaticConfigurationEnabled(false); } +#endif return session; } @@ -501,7 +505,8 @@ IMAPMessageRenderingOperation * IMAPAsyncSession::plainTextBodyRenderingOperatio return session->plainTextBodyRenderingOperation(message, folder); } -void IMAPAsyncSession::automaticConfigurateDone() +void IMAPAsyncSession::automaticConfigurationDone(IMAPSession * session) { + setDefaultNamespace(session->defaultNamespace()); mAutomaticConfigurationDone = true; } diff --git a/src/async/imap/MCIMAPAsyncSession.h b/src/async/imap/MCIMAPAsyncSession.h index 1d0e3e23..920183f2 100755 --- a/src/async/imap/MCIMAPAsyncSession.h +++ b/src/async/imap/MCIMAPAsyncSession.h @@ -36,6 +36,7 @@ namespace mailcore { class IMAPQuotaOperation; class IMAPMessageRenderingOperation; class IMAPMessage; + class IMAPSession; class IMAPAsyncSession : public Object { public: @@ -74,8 +75,8 @@ namespace mailcore { virtual void setVoIPEnabled(bool enabled); virtual bool isVoIPEnabled(); - virtual void setDelimiter(char delimiter); - virtual char delimiter(); + //virtual void setDelimiter(char delimiter); + //virtual char delimiter(); virtual void setDefaultNamespace(IMAPNamespace * ns); virtual IMAPNamespace * defaultNamespace(); @@ -142,7 +143,7 @@ namespace mailcore { virtual IMAPMessageRenderingOperation * plainTextBodyRenderingOperation(IMAPMessage * message, String * folder); public: // private - virtual void automaticConfigurateDone(); + virtual void automaticConfigurationDone(IMAPSession * session); private: Array * mSessions; @@ -156,7 +157,7 @@ namespace mailcore { ConnectionType mConnectionType; bool mCheckCertificateEnabled; bool mVoIPEnabled; - char mDelimiter; + //char mDelimiter; IMAPNamespace * mDefaultNamespace; time_t mTimeout; bool mAllowsFolderConcurrentAccessEnabled; diff --git a/src/async/imap/MCIMAPFetchFoldersOperation.cc b/src/async/imap/MCIMAPFetchFoldersOperation.cc index 41a95572..637c981c 100644 --- a/src/async/imap/MCIMAPFetchFoldersOperation.cc +++ b/src/async/imap/MCIMAPFetchFoldersOperation.cc @@ -53,14 +53,18 @@ void IMAPFetchFoldersOperation::main() MC_SAFE_RETAIN(mFolders); setError(error); +#if 0 char * delimiterData = (char *) malloc(1); * delimiterData = session()->session()->delimiter(); performMethodOnMainThread((Object::Method) &IMAPFetchFoldersOperation::setDelimiterDataOnMainThread, delimiterData, true); +#endif } +#if 0 void IMAPFetchFoldersOperation::setDelimiterDataOnMainThread(char * delimiterData) { session()->setDelimiter(* delimiterData); free(delimiterData); } +#endif diff --git a/src/async/imap/MCIMAPFetchFoldersOperation.h b/src/async/imap/MCIMAPFetchFoldersOperation.h index c59bf85a..2dd01831 100644 --- a/src/async/imap/MCIMAPFetchFoldersOperation.h +++ b/src/async/imap/MCIMAPFetchFoldersOperation.h @@ -35,7 +35,7 @@ namespace mailcore { String * /* IMAPFolder */ mFolder; bool mFetchSubscribedEnabled; Array * mFolders; - void setDelimiterDataOnMainThread(char * delimiterData); + //void setDelimiterDataOnMainThread(char * delimiterData); }; } diff --git a/src/async/imap/MCIMAPOperation.cc b/src/async/imap/MCIMAPOperation.cc index 2ceb2b55..1211a73b 100644 --- a/src/async/imap/MCIMAPOperation.cc +++ b/src/async/imap/MCIMAPOperation.cc @@ -142,6 +142,7 @@ void IMAPOperation::beforeMain() void IMAPOperation::afterMain() { if (mSession->session()->isAutomaticConfigurationDone()) { - mSession->owner()->automaticConfigurateDone(); + mSession->owner()->automaticConfigurationDone(mSession->session()); + mSession->session()->resetAutomaticConfigurationDone(); } } diff --git a/src/core/imap/MCIMAPSession.cc b/src/core/imap/MCIMAPSession.cc index bc82a212..4384bf28 100755 --- a/src/core/imap/MCIMAPSession.cc +++ b/src/core/imap/MCIMAPSession.cc @@ -336,6 +336,7 @@ void IMAPSession::init() mCondstoreEnabled = false; mIdentityEnabled = false; mNamespaceEnabled = false; + mCompressionEnabled = false; mWelcomeString = NULL; mNeedsMboxMailWorkaround = false; mDefaultNamespace = NULL; @@ -354,8 +355,7 @@ void IMAPSession::init() mProgressCallback = NULL; mProgressItemsCount = 0; mConnectionLogger = NULL; - mAutomaticCapabilitiesEnabled = true; - mAutomaticNamespaceEnabled = true; + mAutomaticConfigurationEnabled = true; mAutomaticConfigurationDone = false; } @@ -642,7 +642,7 @@ void IMAPSession::connect(ErrorCode * pError) mState = STATE_CONNECTED; - if (isAutomaticCapabilitiesEnabled()) { + if (isAutomaticConfigurationEnabled()) { if ((mImap->imap_connection_info != NULL) && (mImap->imap_connection_info->imap_capability != NULL)) { // Don't keep result. It will be kept in session state. capabilitySetWithSessionState(IndexSet::indexSet()); @@ -838,7 +838,7 @@ void IMAPSession::login(ErrorCode * pError) mState = STATE_LOGGEDIN; - if (isAutomaticCapabilitiesEnabled()) { + if (isAutomaticConfigurationEnabled()) { if ((mImap->imap_connection_info != NULL) && (mImap->imap_connection_info->imap_capability != NULL)) { // Don't keep result. It will be kept in session state. capabilitySetWithSessionState(IndexSet::indexSet()); @@ -850,15 +850,13 @@ void IMAPSession::login(ErrorCode * pError) return; } } - - enableFeatures(); } else { - // TODO: capabilities should be shared for non automatic capabilities sessions. - enableFeatures(); + // TODO: capabilities should be shared with other sessions for non automatic capabilities sessions. } - - if (isAutomaticNamespaceEnabled()) { + enableFeatures(); + + if (isAutomaticConfigurationEnabled()) { if (isNamespaceEnabled()) { HashMap * result = fetchNamespace(pError); if (* pError != ErrorNone) { @@ -896,8 +894,7 @@ void IMAPSession::login(ErrorCode * pError) } } else { - // TODO: namespace should be shared for non automatic namespace. - // setDefaultNamespace() + // TODO: namespace should be shared with other sessions for non automatic namespace. } mAutomaticConfigurationDone = true; @@ -1252,18 +1249,21 @@ Array * /* IMAPFolder */ IMAPSession::fetchSubscribedFolders(ErrorCode * pError) { int r; clist * imap_folders; - char delimiter; MCLog("fetch subscribed"); loginIfNeeded(pError); if (* pError != ErrorNone) return NULL; - delimiter = fetchDelimiterIfNeeded(mDelimiter, pError); - if (* pError != ErrorNone) - return NULL; - - setDelimiter(delimiter); + if (mDelimiter == 0) { + char delimiter; + + delimiter = fetchDelimiterIfNeeded(mDelimiter, pError); + if (* pError != ErrorNone) + return NULL; + + setDelimiter(delimiter); + } String * prefix; prefix = defaultNamespace()->mainPrefix(); @@ -1271,8 +1271,8 @@ Array * /* IMAPFolder */ IMAPSession::fetchSubscribedFolders(ErrorCode * pError) prefix = MCSTR(""); } if (prefix->length() > 0) { - if (!prefix->hasSuffix(String::stringWithUTF8Format("%c", delimiter))) { - prefix = prefix->stringByAppendingUTF8Format("%c", delimiter); + if (!prefix->hasSuffix(String::stringWithUTF8Format("%c", mDelimiter))) { + prefix = prefix->stringByAppendingUTF8Format("%c", mDelimiter); } } @@ -1285,17 +1285,20 @@ Array * /* IMAPFolder */ IMAPSession::fetchAllFolders(ErrorCode * pError) { int r; clist * imap_folders; - char delimiter; loginIfNeeded(pError); if (* pError != ErrorNone) return NULL; - delimiter = fetchDelimiterIfNeeded(mDelimiter, pError); - if (* pError != ErrorNone) - return NULL; - - setDelimiter(delimiter); + if (mDelimiter == 0) { + char delimiter; + + delimiter = fetchDelimiterIfNeeded(mDelimiter, pError); + if (* pError != ErrorNone) + return NULL; + + setDelimiter(delimiter); + } String * prefix = NULL; if (defaultNamespace()) { @@ -1305,8 +1308,8 @@ Array * /* IMAPFolder */ IMAPSession::fetchAllFolders(ErrorCode * pError) prefix = MCSTR(""); } if (prefix->length() > 0) { - if (!prefix->hasSuffix(String::stringWithUTF8Format("%c", delimiter))) { - prefix = prefix->stringByAppendingUTF8Format("%c", delimiter); + if (!prefix->hasSuffix(String::stringWithUTF8Format("%c", mDelimiter))) { + prefix = prefix->stringByAppendingUTF8Format("%c", mDelimiter); } } @@ -3139,37 +3142,65 @@ void IMAPSession::capabilitySetWithSessionState(IndexSet * capabilities) { if (mailimap_has_id(mImap)) { capabilities->addIndex(IMAPCapabilityId); - mIdentityEnabled = true; } if (mailimap_has_xlist(mImap)) { capabilities->addIndex(IMAPCapabilityXList); - mXListEnabled = true; } if (mailimap_has_extension(mImap, (char *) "X-GM-EXT-1")) { // Disable use of XLIST if this is the Gmail IMAP server because it implements // RFC 6154. - mXListEnabled = false; + capabilities->addIndex(IMAPCapabilityGmail); } if (mailimap_has_idle(mImap)) { capabilities->addIndex(IMAPCapabilityIdle); - mIdleEnabled = true; } if (mailimap_has_condstore(mImap)) { capabilities->addIndex(IMAPCapabilityCondstore); - mCondstoreEnabled = true; } if (mailimap_has_qresync(mImap)) { - result->addIndex(IMAPCapabilityQResync); - mQResyncEnabled = true; + capabilities->addIndex(IMAPCapabilityQResync); } if (mailimap_has_xoauth2(mImap)) { capabilities->addIndex(IMAPCapabilityXOAuth2); - mXOauth2Enabled = true; } if (mailimap_has_namespace(mImap)) { capabilities->addIndex(IMAPCapabilityNamespace); + } + if (mailimap_has_compress_deflate(mImap)) { + capabilities->addIndex(IMAPCapabilityCompressDeflate); + } + applyCapabilities(capabilities); +} + +void IMAPSession::applyCapabilities(IndexSet * capabilities) +{ + if (capabilities->containsIndex(IMAPCapabilityId)) { + mIdentityEnabled = true; + } + if (capabilities->containsIndex(IMAPCapabilityXList)) { + mXListEnabled = true; + } + if (capabilities->containsIndex(IMAPCapabilityGmail)) { + mXListEnabled = false; + } + if (capabilities->containsIndex(IMAPCapabilityIdle)) { + mIdleEnabled = true; + } + if (capabilities->containsIndex(IMAPCapabilityCondstore)) { + mCondstoreEnabled = true; + } + if (capabilities->containsIndex(IMAPCapabilityQResync)) { + mQResyncEnabled = true; + } + if (capabilities->containsIndex(IMAPCapabilityXOAuth2)) { + mXOauth2Enabled = true; + } + if (capabilities->containsIndex(IMAPCapabilityNamespace)) { mNamespaceEnabled = true; } + if (capabilities->containsIndex(IMAPCapabilityCompressDeflate)) { + mCompressionEnabled = true; + } } bool IMAPSession::isIdleEnabled() @@ -3207,6 +3238,11 @@ bool IMAPSession::isNamespaceEnabled() return mNamespaceEnabled; } +bool IMAPSession::isCompressionEnabled() +{ + return mCompressionEnabled; +} + bool IMAPSession::isDisconnected() { return mState == STATE_DISCONNECTED; @@ -3295,24 +3331,14 @@ String * IMAPSession::plainTextBodyRendering(IMAPMessage * message, String * fol return plainTextBodyString; } -void IMAPSession::setAutomaticCapabilitiesEnabled(bool enabled) +void IMAPSession::setAutomaticConfigurationEnabled(bool enabled) { - mAutomaticCapabilitiesEnabled = enabled; + mAutomaticConfigurationEnabled = enabled; } -bool IMAPSession::isAutomaticCapabilitiesEnabled() +bool IMAPSession::isAutomaticConfigurationEnabled() { - return mAutomaticCapabilitiesEnabled; -} - -void IMAPSession::setAutomaticNamespaceEnabled(bool enabled) -{ - mAutomaticNamespaceEnabled = enabled; -} - -bool IMAPSession::isAutomaticNamespaceEnabled() -{ - return mAutomaticNamespaceEnabled; + return mAutomaticConfigurationEnabled; } bool IMAPSession::enableFeature(String * feature) @@ -3339,12 +3365,41 @@ bool IMAPSession::enableFeature(String * feature) void IMAPSession::enableFeatures() { + if (isCompressionEnabled()) { + ErrorCode error; + enableCompression(&error); + if (error != ErrorNone) { + MCLog("could not enable compression"); + } + } + if (isQResyncEnabled()) { - IMAPSession::enableFeature(MCSTR("QRESYNC")); + enableFeature(MCSTR("QRESYNC")); } else if (isCondstoreEnabled()) { - IMAPSession::enableFeature(MCSTR("CONDSTORE")); + enableFeature(MCSTR("CONDSTORE")); + } +} + +void IMAPSession::enableCompression(ErrorCode * pError) +{ + int r; + r = mailimap_compress(mImap); + if (r == MAILIMAP_ERROR_STREAM) { + * pError = ErrorConnection; + return; } + else if (r == MAILIMAP_ERROR_PARSE) { + * pError = ErrorParse; + return; + } + else if (hasError(r)) { + * pError = ErrorCompression; + return; + } + + this->mCompressionEnabled = true; + * pError = ErrorNone; } bool IMAPSession::isAutomaticConfigurationDone() @@ -3352,3 +3407,7 @@ bool IMAPSession::isAutomaticConfigurationDone() return mAutomaticConfigurationDone; } +void IMAPSession::resetAutomaticConfigurationDone() +{ + mAutomaticConfigurationDone = false; +} diff --git a/src/core/imap/MCIMAPSession.h b/src/core/imap/MCIMAPSession.h index 90e145fd..19418323 100755 --- a/src/core/imap/MCIMAPSession.h +++ b/src/core/imap/MCIMAPSession.h @@ -144,6 +144,8 @@ namespace mailcore { virtual IndexSet * capability(ErrorCode * pError); + virtual void enableCompression(ErrorCode * pError); + virtual uint32_t uidValidity(); virtual uint32_t uidNext(); virtual uint64_t modSequenceValue(); @@ -157,6 +159,7 @@ namespace mailcore { virtual bool isIdentityEnabled(); virtual bool isXOAuthEnabled(); virtual bool isNamespaceEnabled(); + virtual bool isCompressionEnabled(); virtual void setConnectionLogger(ConnectionLogger * logger); virtual ConnectionLogger * connectionLogger(); @@ -175,19 +178,18 @@ namespace mailcore { virtual String * plainTextBodyRendering(IMAPMessage * message, String * folder, ErrorCode * pError); /** Enable automatic query of the capabilities of the IMAP server when set to true. */ - virtual void setAutomaticCapabilitiesEnabled(bool enabled); + virtual void setAutomaticConfigurationEnabled(bool enabled); /** Check if the automatic query of the capabilities of the IMAP server is enabled. */ - virtual bool isAutomaticCapabilitiesEnabled(); - - virtual void setAutomaticNamespaceEnabled(bool enabled); - virtual bool isAutomaticNamespaceEnabled(); + virtual bool isAutomaticConfigurationEnabled(); public: // private virtual void loginIfNeeded(ErrorCode * pError); virtual void connectIfNeeded(ErrorCode * pError); virtual bool isDisconnected(); virtual bool isAutomaticConfigurationDone(); + virtual void resetAutomaticConfigurationDone(); + virtual void applyCapabilities(IndexSet * capabilities); private: String * mHostname; @@ -211,6 +213,7 @@ namespace mailcore { bool mIdentityEnabled; bool mXOauth2Enabled; bool mNamespaceEnabled; + bool mCompressionEnabled; String * mWelcomeString; bool mNeedsMboxMailWorkaround; uint32_t mUIDValidity; @@ -228,8 +231,7 @@ namespace mailcore { IMAPProgressCallback * mProgressCallback; unsigned int mProgressItemsCount; ConnectionLogger * mConnectionLogger; - bool mAutomaticCapabilitiesEnabled; - bool mAutomaticNamespaceEnabled; + bool mAutomaticConfigurationEnabled; bool mAutomaticConfigurationDone; void init(); diff --git a/src/objc/abstract/MCOConstants.h b/src/objc/abstract/MCOConstants.h index 427e787a..0bdf9af6 100644 --- a/src/objc/abstract/MCOConstants.h +++ b/src/objc/abstract/MCOConstants.h @@ -328,6 +328,8 @@ typedef enum { MCOErrorDeleteMessage, /** SMTP: Error while checking account.*/ MCOErrorInvalidAccount, + /** IMAP: Error when trying to enable compression.*/ + MCOErrorCompression, /** The count of all errors */ MCOErrorCodeCount, } MCOErrorCode; diff --git a/src/objc/imap/MCOIMAPSession.h b/src/objc/imap/MCOIMAPSession.h index ea920114..fa22c913 100755 --- a/src/objc/imap/MCOIMAPSession.h +++ b/src/objc/imap/MCOIMAPSession.h @@ -80,7 +80,7 @@ @property (nonatomic, assign, getter=isVoIPEnabled) BOOL voIPEnabled; /** The default delimiter for the folder paths */ -@property (nonatomic, assign) char delimiter; +//@property (nonatomic, assign) char delimiter; /** The default namespace. */ @property (nonatomic, strong) MCOIMAPNamespace * defaultNamespace; diff --git a/src/objc/imap/MCOIMAPSession.mm b/src/objc/imap/MCOIMAPSession.mm index a9bbeb5c..4c1542f3 100755 --- a/src/objc/imap/MCOIMAPSession.mm +++ b/src/objc/imap/MCOIMAPSession.mm @@ -86,7 +86,7 @@ MCO_OBJC_SYNTHESIZE_SCALAR(MCOConnectionType, mailcore::ConnectionType, setConne MCO_OBJC_SYNTHESIZE_SCALAR(NSTimeInterval, time_t, setTimeout, timeout) MCO_OBJC_SYNTHESIZE_BOOL(setCheckCertificateEnabled, isCheckCertificateEnabled) MCO_OBJC_SYNTHESIZE_BOOL(setVoIPEnabled, isVoIPEnabled) -MCO_OBJC_SYNTHESIZE_SCALAR(char, char, setDelimiter, delimiter) +//MCO_OBJC_SYNTHESIZE_SCALAR(char, char, setDelimiter, delimiter) MCO_OBJC_SYNTHESIZE_SCALAR(BOOL, BOOL, setAllowsFolderConcurrentAccessEnabled, allowsFolderConcurrentAccessEnabled) MCO_OBJC_SYNTHESIZE_SCALAR(unsigned int, unsigned int, setMaximumConnections, maximumConnections) |