diff options
Diffstat (limited to 'src/async/smtp')
15 files changed, 115 insertions, 8 deletions
diff --git a/src/async/smtp/MCSMTPAsyncSession.cc b/src/async/smtp/MCSMTPAsyncSession.cpp index 1964c944..9fe55e2e 100644 --- a/src/async/smtp/MCSMTPAsyncSession.cc +++ b/src/async/smtp/MCSMTPAsyncSession.cpp @@ -1,6 +1,7 @@ #include "MCSMTPAsyncSession.h" #include "MCSMTPSession.h" +#include "MCSMTPLoginOperation.h" #include "MCSMTPSendWithDataOperation.h" #include "MCSMTPCheckAccountOperation.h" #include "MCSMTPDisconnectOperation.h" @@ -23,9 +24,15 @@ namespace mailcore { virtual void queueStartRunning() { mSession->retain(); + if (mSession->operationQueueCallback() != NULL) { + mSession->operationQueueCallback()->queueStartRunning(); + } } virtual void queueStoppedRunning() { + if (mSession->operationQueueCallback() != NULL) { + mSession->operationQueueCallback()->queueStoppedRunning(); + } mSession->tryAutomaticDisconnect(); mSession->release(); } @@ -64,6 +71,7 @@ SMTPAsyncSession::SMTPAsyncSession() pthread_mutex_init(&mConnectionLoggerLock, NULL); mInternalLogger = new SMTPConnectionLogger(this); mSession->setConnectionLogger(mInternalLogger); + mOperationQueueCallback = NULL; } SMTPAsyncSession::~SMTPAsyncSession() @@ -206,6 +214,13 @@ void SMTPAsyncSession::tryAutomaticDisconnectAfterDelay(void * context) op->start(); } +SMTPOperation * SMTPAsyncSession::loginOperation() +{ + SMTPLoginOperation * op = new SMTPLoginOperation(); + op->setSession(this); + return (SMTPOperation *) op->autorelease(); +} + SMTPOperation * SMTPAsyncSession::sendMessageOperation(Data * messageData) { SMTPSendWithDataOperation * op = new SMTPSendWithDataOperation(); @@ -284,3 +299,23 @@ dispatch_queue_t SMTPAsyncSession::dispatchQueue() return mQueue->dispatchQueue(); } #endif + +void SMTPAsyncSession::setOperationQueueCallback(OperationQueueCallback * callback) +{ + mOperationQueueCallback = callback; +} + +OperationQueueCallback * SMTPAsyncSession::operationQueueCallback() +{ + return mOperationQueueCallback; +} + +bool SMTPAsyncSession::isOperationQueueRunning() +{ + return mQueue->count() > 0; +} + +void SMTPAsyncSession::cancelAllOperations() +{ + mQueue->cancelAllOperations(); +} diff --git a/src/async/smtp/MCSMTPAsyncSession.h b/src/async/smtp/MCSMTPAsyncSession.h index fa0893d2..38da3717 100644 --- a/src/async/smtp/MCSMTPAsyncSession.h +++ b/src/async/smtp/MCSMTPAsyncSession.h @@ -16,7 +16,7 @@ namespace mailcore { class SMTPOperationQueueCallback; class SMTPConnectionLogger; - class SMTPAsyncSession : public Object { + class MAILCORE_EXPORT SMTPAsyncSession : public Object { public: SMTPAsyncSession(); virtual ~SMTPAsyncSession(); @@ -58,7 +58,13 @@ namespace mailcore { virtual void setDispatchQueue(dispatch_queue_t dispatchQueue); virtual dispatch_queue_t dispatchQueue(); #endif - + + virtual void setOperationQueueCallback(OperationQueueCallback * callback); + virtual OperationQueueCallback * operationQueueCallback(); + virtual bool isOperationQueueRunning(); + virtual void cancelAllOperations(); + + virtual SMTPOperation * loginOperation(); virtual SMTPOperation * sendMessageOperation(Data * messageData); virtual SMTPOperation * sendMessageOperation(Address * from, Array * recipients, Data * messageData); @@ -79,6 +85,7 @@ namespace mailcore { ConnectionLogger * mConnectionLogger; pthread_mutex_t mConnectionLoggerLock; SMTPConnectionLogger * mInternalLogger; + OperationQueueCallback * mOperationQueueCallback; virtual void tryAutomaticDisconnectAfterDelay(void * context); }; diff --git a/src/async/smtp/MCSMTPCheckAccountOperation.cc b/src/async/smtp/MCSMTPCheckAccountOperation.cpp index f711c6ec..f711c6ec 100644 --- a/src/async/smtp/MCSMTPCheckAccountOperation.cc +++ b/src/async/smtp/MCSMTPCheckAccountOperation.cpp diff --git a/src/async/smtp/MCSMTPCheckAccountOperation.h b/src/async/smtp/MCSMTPCheckAccountOperation.h index e1fd373f..ad45d38b 100644 --- a/src/async/smtp/MCSMTPCheckAccountOperation.h +++ b/src/async/smtp/MCSMTPCheckAccountOperation.h @@ -17,7 +17,7 @@ namespace mailcore { - class SMTPCheckAccountOperation : public SMTPOperation { + class MAILCORE_EXPORT SMTPCheckAccountOperation : public SMTPOperation { public: SMTPCheckAccountOperation(); virtual ~SMTPCheckAccountOperation(); diff --git a/src/async/smtp/MCSMTPDisconnectOperation.cc b/src/async/smtp/MCSMTPDisconnectOperation.cpp index ba20567b..ba20567b 100644 --- a/src/async/smtp/MCSMTPDisconnectOperation.cc +++ b/src/async/smtp/MCSMTPDisconnectOperation.cpp diff --git a/src/async/smtp/MCSMTPDisconnectOperation.h b/src/async/smtp/MCSMTPDisconnectOperation.h index 11853065..668e3c41 100644 --- a/src/async/smtp/MCSMTPDisconnectOperation.h +++ b/src/async/smtp/MCSMTPDisconnectOperation.h @@ -18,7 +18,7 @@ namespace mailcore { - class SMTPDisconnectOperation : public SMTPOperation { + class MAILCORE_EXPORT SMTPDisconnectOperation : public SMTPOperation { public: SMTPDisconnectOperation(); virtual ~SMTPDisconnectOperation(); diff --git a/src/async/smtp/MCSMTPLoginOperation.cpp b/src/async/smtp/MCSMTPLoginOperation.cpp new file mode 100644 index 00000000..58866df9 --- /dev/null +++ b/src/async/smtp/MCSMTPLoginOperation.cpp @@ -0,0 +1,29 @@ +// +// MCSMTPLoginOperation.cc +// mailcore2 +// +// Created by Hironori Yoshida on 10/29/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#include "MCSMTPLoginOperation.h" + +#include "MCSMTPAsyncSession.h" +#include "MCSMTPSession.h" + +using namespace mailcore; + +SMTPLoginOperation::SMTPLoginOperation() +{ +} + +SMTPLoginOperation::~SMTPLoginOperation() +{ +} + +void SMTPLoginOperation::main() +{ + ErrorCode error; + session()->session()->loginIfNeeded(&error); + setError(error); +} diff --git a/src/async/smtp/MCSMTPLoginOperation.h b/src/async/smtp/MCSMTPLoginOperation.h new file mode 100644 index 00000000..fd993459 --- /dev/null +++ b/src/async/smtp/MCSMTPLoginOperation.h @@ -0,0 +1,34 @@ +// +// MCSMTPLoginOperation.h +// mailcore2 +// +// Created by Hironori Yoshida on 10/29/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCSMTPLOGINOPERATION_H + +#define MAILCORE_MCSMTPLOGINOPERATION_H + +#include <MailCore/MCBaseTypes.h> +#include <MailCore/MCAbstract.h> +#include <MailCore/MCSMTPOperation.h> + +#ifdef __cplusplus + +namespace mailcore { + + class MAILCORE_EXPORT SMTPLoginOperation : public SMTPOperation { + public: + SMTPLoginOperation(); + virtual ~SMTPLoginOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif diff --git a/src/async/smtp/MCSMTPNoopOperation.cc b/src/async/smtp/MCSMTPNoopOperation.cpp index 310ccb8e..310ccb8e 100644 --- a/src/async/smtp/MCSMTPNoopOperation.cc +++ b/src/async/smtp/MCSMTPNoopOperation.cpp diff --git a/src/async/smtp/MCSMTPNoopOperation.h b/src/async/smtp/MCSMTPNoopOperation.h index 09116758..ad194367 100644 --- a/src/async/smtp/MCSMTPNoopOperation.h +++ b/src/async/smtp/MCSMTPNoopOperation.h @@ -18,7 +18,7 @@ namespace mailcore { - class SMTPNoopOperation : public SMTPOperation { + class MAILCORE_EXPORT SMTPNoopOperation : public SMTPOperation { public: SMTPNoopOperation(); virtual ~SMTPNoopOperation(); diff --git a/src/async/smtp/MCSMTPOperation.cc b/src/async/smtp/MCSMTPOperation.cpp index 9ddcede2..9ddcede2 100644 --- a/src/async/smtp/MCSMTPOperation.cc +++ b/src/async/smtp/MCSMTPOperation.cpp diff --git a/src/async/smtp/MCSMTPOperation.h b/src/async/smtp/MCSMTPOperation.h index 1d24f481..5978d3d6 100644 --- a/src/async/smtp/MCSMTPOperation.h +++ b/src/async/smtp/MCSMTPOperation.h @@ -20,7 +20,7 @@ namespace mailcore { class SMTPAsyncSession; class SMTPOperationCallback; - class SMTPOperation : public Operation, public SMTPProgressCallback { + class MAILCORE_EXPORT SMTPOperation : public Operation, public SMTPProgressCallback { public: SMTPOperation(); virtual ~SMTPOperation(); diff --git a/src/async/smtp/MCSMTPOperationCallback.h b/src/async/smtp/MCSMTPOperationCallback.h index 5a3d00df..a5cfdd84 100644 --- a/src/async/smtp/MCSMTPOperationCallback.h +++ b/src/async/smtp/MCSMTPOperationCallback.h @@ -10,13 +10,15 @@ #define MAILCORE_MCSMTPOPERATIONCALLBACK_H +#include <MailCore/MCUtils.h> + #ifdef __cplusplus namespace mailcore { class SMTPOperation; - class SMTPOperationCallback { + class MAILCORE_EXPORT SMTPOperationCallback { public: virtual void bodyProgress(SMTPOperation * session, unsigned int current, unsigned int maximum) {}; }; diff --git a/src/async/smtp/MCSMTPSendWithDataOperation.cc b/src/async/smtp/MCSMTPSendWithDataOperation.cpp index 03f6a530..03f6a530 100644 --- a/src/async/smtp/MCSMTPSendWithDataOperation.cc +++ b/src/async/smtp/MCSMTPSendWithDataOperation.cpp diff --git a/src/async/smtp/MCSMTPSendWithDataOperation.h b/src/async/smtp/MCSMTPSendWithDataOperation.h index 9d2f087a..a8ee2515 100644 --- a/src/async/smtp/MCSMTPSendWithDataOperation.h +++ b/src/async/smtp/MCSMTPSendWithDataOperation.h @@ -18,7 +18,7 @@ namespace mailcore { - class SMTPSendWithDataOperation : public SMTPOperation { + class MAILCORE_EXPORT SMTPSendWithDataOperation : public SMTPOperation { public: SMTPSendWithDataOperation(); virtual ~SMTPSendWithDataOperation(); |