diff options
author | CodaFi <devteam.codafi@gmail.com> | 2013-09-24 20:05:38 -0600 |
---|---|---|
committer | CodaFi <devteam.codafi@gmail.com> | 2013-09-24 20:05:38 -0600 |
commit | 512ea11d3d76666d891ace7034edb6280fa8b24c (patch) | |
tree | a7f48566ad31c9dbd0cb16936f980da5b99c3131 | |
parent | 93fb5050f9b63980e7cd16eec084a863254bd1e3 (diff) |
Implement SMTP noop
-rwxr-xr-x | build-mac/mailcore2.xcodeproj/project.pbxproj | 8 | ||||
-rw-r--r-- | src/async/smtp/MCSMTPAsyncSession.cc | 7 | ||||
-rw-r--r-- | src/async/smtp/MCSMTPAsyncSession.h | 84 | ||||
-rw-r--r-- | src/async/smtp/MCSMTPDisconnectOperation.h | 2 | ||||
-rw-r--r-- | src/async/smtp/MCSMTPNoopOperation.cc | 29 | ||||
-rw-r--r-- | src/async/smtp/MCSMTPNoopOperation.h | 33 | ||||
-rw-r--r-- | src/async/smtp/MCSMTPOperation.h | 2 | ||||
-rw-r--r-- | src/core/smtp/MCSMTPSession.cc | 18 | ||||
-rw-r--r-- | src/core/smtp/MCSMTPSession.h | 2 |
9 files changed, 142 insertions, 43 deletions
diff --git a/build-mac/mailcore2.xcodeproj/project.pbxproj b/build-mac/mailcore2.xcodeproj/project.pbxproj index c34b47a1..8bba6512 100755 --- a/build-mac/mailcore2.xcodeproj/project.pbxproj +++ b/build-mac/mailcore2.xcodeproj/project.pbxproj @@ -16,6 +16,8 @@ 4BE4029117B548B900ECC5E4 /* MCOIMAPQuotaOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4B3C1BDC17ABF306008BBF4C /* MCOIMAPQuotaOperation.h */; }; 4BE4029217B548D900ECC5E4 /* MCIMAPQuotaOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4B3C1BE017ABF4BC008BBF4C /* MCIMAPQuotaOperation.h */; }; 84AF9E7E172DBAF600E60AA3 /* providers.json in Resources */ = {isa = PBXBuildFile; fileRef = 84AF9E7D172DBAF600E60AA3 /* providers.json */; }; + 84B639E317F279BB003B5BA2 /* MCSMTPNoopOperation.cc in Sources */ = {isa = PBXBuildFile; fileRef = 84B639E117F279BB003B5BA2 /* MCSMTPNoopOperation.cc */; }; + 84B639E417F279BB003B5BA2 /* MCSMTPNoopOperation.cc in Sources */ = {isa = PBXBuildFile; fileRef = 84B639E117F279BB003B5BA2 /* MCSMTPNoopOperation.cc */; }; 943F1A9A17D964F600F0C798 /* MCIMAPConnectOperation.cc in Sources */ = {isa = PBXBuildFile; fileRef = 943F1A9817D964F600F0C798 /* MCIMAPConnectOperation.cc */; }; 943F1A9E17D96C5500F0C798 /* MCIMAPConnectOperation.cc in Sources */ = {isa = PBXBuildFile; fileRef = 943F1A9817D964F600F0C798 /* MCIMAPConnectOperation.cc */; }; 943F1AA017D9736100F0C798 /* MCIMAPConnectOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 943F1A9917D964F600F0C798 /* MCIMAPConnectOperation.h */; }; @@ -1140,6 +1142,8 @@ 4B3C1BDF17ABF4BB008BBF4C /* MCIMAPQuotaOperation.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPQuotaOperation.cc; sourceTree = "<group>"; }; 4B3C1BE017ABF4BC008BBF4C /* MCIMAPQuotaOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPQuotaOperation.h; sourceTree = "<group>"; }; 84AF9E7D172DBAF600E60AA3 /* providers.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = providers.json; path = ../resources/providers.json; sourceTree = "<group>"; }; + 84B639E117F279BB003B5BA2 /* MCSMTPNoopOperation.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCSMTPNoopOperation.cc; sourceTree = "<group>"; }; + 84B639E217F279BB003B5BA2 /* MCSMTPNoopOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCSMTPNoopOperation.h; sourceTree = "<group>"; }; 943F1A9817D964F600F0C798 /* MCIMAPConnectOperation.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIMAPConnectOperation.cc; sourceTree = "<group>"; }; 943F1A9917D964F600F0C798 /* MCIMAPConnectOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPConnectOperation.h; sourceTree = "<group>"; }; 9E774D871767C54E0065EB9B /* MCIMAPFolderStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPFolderStatus.h; sourceTree = "<group>"; }; @@ -1845,6 +1849,8 @@ C64EA79D169F29A700778456 /* MCSMTPSendWithDataOperation.h */, C608167317759967001F1018 /* MCSMTPDisconnectOperation.cc */, C608167417759967001F1018 /* MCSMTPDisconnectOperation.h */, + 84B639E117F279BB003B5BA2 /* MCSMTPNoopOperation.cc */, + 84B639E217F279BB003B5BA2 /* MCSMTPNoopOperation.h */, C64EA7D816A1386500778456 /* MCSMTPOperation.cc */, C64EA7D916A1386600778456 /* MCSMTPOperation.h */, C64EA7E116A1425400778456 /* MCSMTPOperationCallback.h */, @@ -2493,6 +2499,7 @@ C64EA701169E847800778456 /* MCAutoreleasePool.cc in Sources */, C64EA704169E847800778456 /* MCArray.cc in Sources */, C6E665B51796500B0063F2CF /* MCZip.cc in Sources */, + 84B639E317F279BB003B5BA2 /* MCSMTPNoopOperation.cc in Sources */, C64EA706169E847800778456 /* MCAssert.c in Sources */, C64EA708169E847800778456 /* MCData.cc in Sources */, C64EA70A169E847800778456 /* MCHash.cc in Sources */, @@ -2690,6 +2697,7 @@ C6BA2B9F1705F4E6003F0E9E /* MCAutoreleasePool.cc in Sources */, C6BA2BA01705F4E6003F0E9E /* MCArray.cc in Sources */, C6E665B61796500B0063F2CF /* MCZip.cc in Sources */, + 84B639E417F279BB003B5BA2 /* MCSMTPNoopOperation.cc in Sources */, C6BA2BA11705F4E6003F0E9E /* MCAssert.c in Sources */, C6BA2BA21705F4E6003F0E9E /* MCData.cc in Sources */, C6BA2BA31705F4E6003F0E9E /* MCHash.cc in Sources */, diff --git a/src/async/smtp/MCSMTPAsyncSession.cc b/src/async/smtp/MCSMTPAsyncSession.cc index 605f267a..122bd769 100644 --- a/src/async/smtp/MCSMTPAsyncSession.cc +++ b/src/async/smtp/MCSMTPAsyncSession.cc @@ -4,6 +4,7 @@ #include "MCSMTPSendWithDataOperation.h" #include "MCSMTPCheckAccountOperation.h" #include "MCSMTPDisconnectOperation.h" +#include "MCSMTPNoopOperation.h" #include "MCSMTPOperation.h" #include "MCOperationQueueCallback.h" @@ -230,6 +231,12 @@ SMTPOperation * SMTPAsyncSession::checkAccountOperation(Address * from) return (SMTPOperation *) op->autorelease(); } +SMTPOperation * SMTPAsyncSession::noopOperation() { + SMTPNoopOperation * op = new SMTPNoopOperation(); + op->setSession(this); + return (SMTPOperation *) op->autorelease(); +} + void SMTPAsyncSession::setConnectionLogger(ConnectionLogger * logger) { pthread_mutex_lock(&mConnectionLoggerLock); diff --git a/src/async/smtp/MCSMTPAsyncSession.h b/src/async/smtp/MCSMTPAsyncSession.h index f013dc26..d5e93ecf 100644 --- a/src/async/smtp/MCSMTPAsyncSession.h +++ b/src/async/smtp/MCSMTPAsyncSession.h @@ -9,72 +9,74 @@ namespace mailcore { - class MessageBuilder; - class SMTPOperation; - class SMTPSession; + class MessageBuilder; + class SMTPOperation; + class SMTPSession; class Address; class SMTPOperationQueueCallback; class SMTPConnectionLogger; - class SMTPAsyncSession : public Object { - public: - SMTPAsyncSession(); - virtual ~SMTPAsyncSession(); - - virtual void setHostname(String * hostname); - virtual String * hostname(); - - virtual void setPort(unsigned int port); - virtual unsigned int port(); - - virtual void setUsername(String * username); - virtual String * username(); - - virtual void setPassword(String * password); - virtual String * password(); - + class SMTPAsyncSession : public Object { + public: + SMTPAsyncSession(); + virtual ~SMTPAsyncSession(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * username); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + virtual void setOAuth2Token(String * token); virtual String * OAuth2Token(); - virtual void setAuthType(AuthType authType); - virtual AuthType authType(); - - virtual void setConnectionType(ConnectionType connectionType); - virtual ConnectionType connectionType(); - - virtual void setTimeout(time_t timeout); - virtual time_t timeout(); - - virtual void setCheckCertificateEnabled(bool enabled); - virtual bool isCheckCertificateEnabled(); - - virtual void setUseHeloIPEnabled(bool enabled); - virtual bool useHeloIPEnabled(); - + virtual void setAuthType(AuthType authType); + virtual AuthType authType(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void setUseHeloIPEnabled(bool enabled); + virtual bool useHeloIPEnabled(); + virtual void setConnectionLogger(ConnectionLogger * logger); virtual ConnectionLogger * connectionLogger(); - virtual SMTPOperation * sendMessageOperation(Data * messageData); - virtual SMTPOperation * sendMessageOperation(Address * from, Array * recipients, + virtual SMTPOperation * sendMessageOperation(Data * messageData); + virtual SMTPOperation * sendMessageOperation(Address * from, Array * recipients, Data * messageData); virtual SMTPOperation * checkAccountOperation(Address * from); + virtual SMTPOperation * noopOperation(); + public: // private virtual void runOperation(SMTPOperation * operation); virtual SMTPSession * session(); virtual void tryAutomaticDisconnect(); virtual void logConnection(ConnectionLogType logType, Data * buffer); - - private: + + private: SMTPSession * mSession; OperationQueue * mQueue; SMTPOperationQueueCallback * mQueueCallback; ConnectionLogger * mConnectionLogger; pthread_mutex_t mConnectionLoggerLock; SMTPConnectionLogger * mInternalLogger; - + virtual void tryAutomaticDisconnectAfterDelay(void * context); - }; + }; } diff --git a/src/async/smtp/MCSMTPDisconnectOperation.h b/src/async/smtp/MCSMTPDisconnectOperation.h index dacf72a6..8f160029 100644 --- a/src/async/smtp/MCSMTPDisconnectOperation.h +++ b/src/async/smtp/MCSMTPDisconnectOperation.h @@ -29,4 +29,4 @@ namespace mailcore { #endif -#endif
\ No newline at end of file +#endif diff --git a/src/async/smtp/MCSMTPNoopOperation.cc b/src/async/smtp/MCSMTPNoopOperation.cc new file mode 100644 index 00000000..310ccb8e --- /dev/null +++ b/src/async/smtp/MCSMTPNoopOperation.cc @@ -0,0 +1,29 @@ +// +// MCSMTPNoopOperation.cc +// mailcore2 +// +// Created by Robert Widmann on 9/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCSMTPNoopOperation.h" + +#include "MCSMTPAsyncSession.h" +#include "MCSMTPSession.h" + +using namespace mailcore; + +SMTPNoopOperation::SMTPNoopOperation() +{ +} + +SMTPNoopOperation::~SMTPNoopOperation() +{ +} + +void SMTPNoopOperation::main() +{ + ErrorCode error; + session()->session()->noop(&error); + setError(error); +} diff --git a/src/async/smtp/MCSMTPNoopOperation.h b/src/async/smtp/MCSMTPNoopOperation.h new file mode 100644 index 00000000..8c97fa0e --- /dev/null +++ b/src/async/smtp/MCSMTPNoopOperation.h @@ -0,0 +1,33 @@ +// +// MCSMTPNoopOperation.h +// mailcore2 +// +// Created by Robert Widmann on 9/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef __MAILCORE_MCSMTPNOOPOPERATION_H_ +#define __MAILCORE_MCSMTPNOOPOPERATION_H_ + +#include <MailCore/MCBaseTypes.h> +#include <MailCore/MCAbstract.h> +#include <MailCore/MCSMTPOperation.h> + +#ifdef __cplusplus + +namespace mailcore { + + class SMTPNoopOperation : public SMTPOperation { + public: + SMTPNoopOperation(); + virtual ~SMTPNoopOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif diff --git a/src/async/smtp/MCSMTPOperation.h b/src/async/smtp/MCSMTPOperation.h index b8b6f35f..1f7a2c79 100644 --- a/src/async/smtp/MCSMTPOperation.h +++ b/src/async/smtp/MCSMTPOperation.h @@ -41,7 +41,7 @@ namespace mailcore { SMTPOperationCallback * mSmtpCallback; ErrorCode mError; private: - virtual void bodyProgress(SMTPSession * session, unsigned int current, unsigned int maximum); + virtual void bodyProgress(SMTPSession * session, unsigned int current, unsigned int maximum); virtual void bodyProgressOnMainThread(void * context); }; diff --git a/src/core/smtp/MCSMTPSession.cc b/src/core/smtp/MCSMTPSession.cc index 4b31fd6d..a3cace83 100644 --- a/src/core/smtp/MCSMTPSession.cc +++ b/src/core/smtp/MCSMTPSession.cc @@ -756,6 +756,24 @@ void SMTPSession::sendMessage(MessageBuilder * msg, SMTPProgressCallback * callb recipients->release(); } +void SMTPSession::noop(ErrorCode * pError) { + int r; + + if (mSmtp == NULL) + return; + MCLog("connect"); + loginIfNeeded(pError); + if (* pError != ErrorNone) { + return; + } + if (mSmtp->stream != NULL) { + r = mailsmtp_noop(mSmtp); + if (r == MAILSMTP_ERROR_STREAM) { + * pError = ErrorConnection; + } + } +} + bool SMTPSession::isDisconnected() { return mState == STATE_DISCONNECTED; diff --git a/src/core/smtp/MCSMTPSession.h b/src/core/smtp/MCSMTPSession.h index 28f94ada..04153c7a 100644 --- a/src/core/smtp/MCSMTPSession.h +++ b/src/core/smtp/MCSMTPSession.h @@ -64,6 +64,8 @@ namespace mailcore { virtual void setConnectionLogger(ConnectionLogger * logger); virtual ConnectionLogger * connectionLogger(); + virtual void noop(ErrorCode * pError); + private: String * mHostname; unsigned int mPort; |