aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar CodaFi <devteam.codafi@gmail.com>2013-09-24 20:05:38 -0600
committerGravatar CodaFi <devteam.codafi@gmail.com>2013-09-24 20:05:38 -0600
commit512ea11d3d76666d891ace7034edb6280fa8b24c (patch)
treea7f48566ad31c9dbd0cb16936f980da5b99c3131
parent93fb5050f9b63980e7cd16eec084a863254bd1e3 (diff)
Implement SMTP noop
-rwxr-xr-xbuild-mac/mailcore2.xcodeproj/project.pbxproj8
-rw-r--r--src/async/smtp/MCSMTPAsyncSession.cc7
-rw-r--r--src/async/smtp/MCSMTPAsyncSession.h84
-rw-r--r--src/async/smtp/MCSMTPDisconnectOperation.h2
-rw-r--r--src/async/smtp/MCSMTPNoopOperation.cc29
-rw-r--r--src/async/smtp/MCSMTPNoopOperation.h33
-rw-r--r--src/async/smtp/MCSMTPOperation.h2
-rw-r--r--src/core/smtp/MCSMTPSession.cc18
-rw-r--r--src/core/smtp/MCSMTPSession.h2
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;