aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xbuild-mac/mailcore2.xcodeproj/project.pbxproj20
-rw-r--r--src/async/smtp/MCSMTPAsyncSession.cc8
-rw-r--r--src/async/smtp/MCSMTPAsyncSession.h1
-rw-r--r--src/async/smtp/MCSMTPLoginOperation.cc29
-rw-r--r--src/async/smtp/MCSMTPLoginOperation.h34
-rw-r--r--src/cmake/async.cmake1
-rw-r--r--src/cmake/objc.cmake1
-rw-r--r--src/core/smtp/MCSMTPSession.h2
-rw-r--r--src/objc/smtp/MCOSMTPLoginOperation.h32
-rw-r--r--src/objc/smtp/MCOSMTPLoginOperation.mm66
-rw-r--r--src/objc/smtp/MCOSMTPSession.h10
-rw-r--r--src/objc/smtp/MCOSMTPSession.mm9
12 files changed, 212 insertions, 1 deletions
diff --git a/build-mac/mailcore2.xcodeproj/project.pbxproj b/build-mac/mailcore2.xcodeproj/project.pbxproj
index 4fadc330..07a60469 100755
--- a/build-mac/mailcore2.xcodeproj/project.pbxproj
+++ b/build-mac/mailcore2.xcodeproj/project.pbxproj
@@ -135,6 +135,12 @@
84E65533199BE15500EC8CC4 /* MCNNTPSession.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 849189A018C93FB7002063A3 /* MCNNTPSession.h */; };
84E65534199BE2BF00EC8CC4 /* MCNNTPGroupInfo.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 849189AA18C94986002063A3 /* MCNNTPGroupInfo.h */; };
84E65535199BE2C300EC8CC4 /* MCNNTPGroupInfo.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 849189AA18C94986002063A3 /* MCNNTPGroupInfo.h */; };
+ 8B0095C91A00DDC500F84BC0 /* MCSMTPLoginOperation.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B0095C71A00DDC500F84BC0 /* MCSMTPLoginOperation.cc */; };
+ 8B0095CC1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8B0095CB1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm */; };
+ 8B0095CD1A00DE2A00F84BC0 /* MCOSMTPLoginOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8B0095CA1A00DDE700F84BC0 /* MCOSMTPLoginOperation.h */; };
+ 8B0095CE1A00DE7700F84BC0 /* MCOSMTPLoginOperation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 8B0095CB1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm */; };
+ 8B0095CF1A00DE7700F84BC0 /* MCSMTPLoginOperation.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8B0095C71A00DDC500F84BC0 /* MCSMTPLoginOperation.cc */; };
+ 8B5764371A00E1B0004868C0 /* MCOSMTPLoginOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8B0095CA1A00DDE700F84BC0 /* MCOSMTPLoginOperation.h */; };
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 */; };
@@ -975,6 +981,7 @@
C6A81BF01707806800882C15 /* MCOSMTPOperation.h in CopyFiles */,
C6A81BED1707806100882C15 /* MCOPOPFetchMessagesOperation.h in CopyFiles */,
C6D6F96B1720F92D006F5B28 /* MCICUTypes.h in CopyFiles */,
+ 8B5764371A00E1B0004868C0 /* MCOSMTPLoginOperation.h in CopyFiles */,
C6A81BEF1707806600882C15 /* MCOSMTPSendOperation.h in CopyFiles */,
C63CD68916BE1BC100DB18F1 /* MCDateFormatter.h in CopyFiles */,
C6F61FAE170288640073032E /* MCOMessageBuilder.h in CopyFiles */,
@@ -1210,6 +1217,7 @@
C6CF62DA175325D5006398B9 /* MCMailProvidersManager.h in CopyFiles */,
C6CF62DB175325E2006398B9 /* MCNetService.h in CopyFiles */,
C6A81BF91707811500882C15 /* MCOSMTPOperation.h in CopyFiles */,
+ 8B0095CD1A00DE2A00F84BC0 /* MCOSMTPLoginOperation.h in CopyFiles */,
C6A81BF81707811100882C15 /* MCOSMTPSendOperation.h in CopyFiles */,
C6BA2B111705F4E6003F0E9E /* MCOConstants.h in CopyFiles */,
C6A81BF71707811000882C15 /* MCOSMTPSession.h in CopyFiles */,
@@ -1431,6 +1439,10 @@
84D7378E199C02A8005124E5 /* MCONNTPDisconnectOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCONNTPDisconnectOperation.mm; sourceTree = "<group>"; };
84D73791199C0511005124E5 /* MCONNTPGroupInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCONNTPGroupInfo.h; sourceTree = "<group>"; };
84D73792199C0511005124E5 /* MCONNTPGroupInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCONNTPGroupInfo.mm; sourceTree = "<group>"; };
+ 8B0095C71A00DDC500F84BC0 /* MCSMTPLoginOperation.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCSMTPLoginOperation.cc; sourceTree = "<group>"; };
+ 8B0095C81A00DDC500F84BC0 /* MCSMTPLoginOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCSMTPLoginOperation.h; sourceTree = "<group>"; };
+ 8B0095CA1A00DDE700F84BC0 /* MCOSMTPLoginOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOSMTPLoginOperation.h; sourceTree = "<group>"; };
+ 8B0095CB1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOSMTPLoginOperation.mm; 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>"; };
@@ -2249,6 +2261,8 @@
C64EA7E316A149EF00778456 /* MCAsyncSMTP.h */,
C64EA68F169E847800778456 /* MCSMTPAsyncSession.cc */,
C64EA690169E847800778456 /* MCSMTPAsyncSession.h */,
+ 8B0095C71A00DDC500F84BC0 /* MCSMTPLoginOperation.cc */,
+ 8B0095C81A00DDC500F84BC0 /* MCSMTPLoginOperation.h */,
C64EA79C169F29A700778456 /* MCSMTPSendWithDataOperation.cc */,
C64EA79D169F29A700778456 /* MCSMTPSendWithDataOperation.h */,
C608167317759967001F1018 /* MCSMTPDisconnectOperation.cc */,
@@ -2638,6 +2652,8 @@
C6A81BE81706A6B300882C15 /* MCOSMTP.h */,
C6A81BBD17068E5E00882C15 /* MCOSMTPSession.h */,
C6A81BBE17068E5E00882C15 /* MCOSMTPSession.mm */,
+ 8B0095CA1A00DDE700F84BC0 /* MCOSMTPLoginOperation.h */,
+ 8B0095CB1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm */,
C6A81BC117068E9500882C15 /* MCOSMTPSendOperation.h */,
C6A81BC217068E9500882C15 /* MCOSMTPSendOperation.mm */,
8416A99B17F284F400B3C7DA /* MCOSMTPNoopOperation.h */,
@@ -3088,6 +3104,7 @@
8416A9A117F2871D00B3C7DA /* MCOIMAPNoopOperation.mm in Sources */,
C64EA784169F24E400778456 /* MCSMTPAsyncSession.cc in Sources */,
C6F7B19F17A1C15200BE78BB /* MCCertificateUtils.cc in Sources */,
+ 8B0095C91A00DDC500F84BC0 /* MCSMTPLoginOperation.cc in Sources */,
C64EA79E169F29A700778456 /* MCSMTPSendWithDataOperation.cc in Sources */,
C64EA7DA16A1386600778456 /* MCSMTPOperation.cc in Sources */,
C64EA7EA16A154B300778456 /* MCSMTPCheckAccountOperation.cc in Sources */,
@@ -3202,6 +3219,7 @@
C6F61FB51702AB340073032E /* MCOIMAPBaseOperation.mm in Sources */,
C608167517759967001F1018 /* MCSMTPDisconnectOperation.cc in Sources */,
C6A81BBF17068E5E00882C15 /* MCOSMTPSession.mm in Sources */,
+ 8B0095CC1A00DDE700F84BC0 /* MCOSMTPLoginOperation.mm in Sources */,
C6A81BC317068E9500882C15 /* MCOSMTPSendOperation.mm in Sources */,
C6A81BC717068EB000882C15 /* MCOSMTPOperation.mm in Sources */,
8416A99D17F284F400B3C7DA /* MCOSMTPNoopOperation.mm in Sources */,
@@ -3330,6 +3348,7 @@
8416A9A217F2871D00B3C7DA /* MCOIMAPNoopOperation.mm in Sources */,
C6BA2BBF1705F4E6003F0E9E /* MCSMTPAsyncSession.cc in Sources */,
C6F7B1A017A1C15200BE78BB /* MCCertificateUtils.cc in Sources */,
+ 8B0095CF1A00DE7700F84BC0 /* MCSMTPLoginOperation.cc in Sources */,
C6BA2BC01705F4E6003F0E9E /* MCSMTPSendWithDataOperation.cc in Sources */,
C6BA2BC11705F4E6003F0E9E /* MCSMTPOperation.cc in Sources */,
C6BA2BC21705F4E6003F0E9E /* MCSMTPCheckAccountOperation.cc in Sources */,
@@ -3444,6 +3463,7 @@
C6BA2C141705F4E6003F0E9E /* MCOIMAPBaseOperation.mm in Sources */,
C608167617759968001F1018 /* MCSMTPDisconnectOperation.cc in Sources */,
C6A81BC017068E5E00882C15 /* MCOSMTPSession.mm in Sources */,
+ 8B0095CE1A00DE7700F84BC0 /* MCOSMTPLoginOperation.mm in Sources */,
C6A81BC417068E9500882C15 /* MCOSMTPSendOperation.mm in Sources */,
C6A81BC817068EB000882C15 /* MCOSMTPOperation.mm in Sources */,
8416A99E17F284F400B3C7DA /* MCOSMTPNoopOperation.mm in Sources */,
diff --git a/src/async/smtp/MCSMTPAsyncSession.cc b/src/async/smtp/MCSMTPAsyncSession.cc
index 1964c944..8acfc9c5 100644
--- a/src/async/smtp/MCSMTPAsyncSession.cc
+++ b/src/async/smtp/MCSMTPAsyncSession.cc
@@ -1,6 +1,7 @@
#include "MCSMTPAsyncSession.h"
#include "MCSMTPSession.h"
+#include "MCSMTPLoginOperation.h"
#include "MCSMTPSendWithDataOperation.h"
#include "MCSMTPCheckAccountOperation.h"
#include "MCSMTPDisconnectOperation.h"
@@ -206,6 +207,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();
diff --git a/src/async/smtp/MCSMTPAsyncSession.h b/src/async/smtp/MCSMTPAsyncSession.h
index fa0893d2..a48b5c26 100644
--- a/src/async/smtp/MCSMTPAsyncSession.h
+++ b/src/async/smtp/MCSMTPAsyncSession.h
@@ -59,6 +59,7 @@ namespace mailcore {
virtual dispatch_queue_t dispatchQueue();
#endif
+ virtual SMTPOperation * loginOperation();
virtual SMTPOperation * sendMessageOperation(Data * messageData);
virtual SMTPOperation * sendMessageOperation(Address * from, Array * recipients,
Data * messageData);
diff --git a/src/async/smtp/MCSMTPLoginOperation.cc b/src/async/smtp/MCSMTPLoginOperation.cc
new file mode 100644
index 00000000..58866df9
--- /dev/null
+++ b/src/async/smtp/MCSMTPLoginOperation.cc
@@ -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..f28356c1
--- /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 SMTPLoginOperation : public SMTPOperation {
+ public:
+ SMTPLoginOperation();
+ virtual ~SMTPLoginOperation();
+
+ public: // subclass behavior
+ virtual void main();
+ };
+
+}
+
+#endif
+
+#endif
diff --git a/src/cmake/async.cmake b/src/cmake/async.cmake
index 947a69ee..dc4a7243 100644
--- a/src/cmake/async.cmake
+++ b/src/cmake/async.cmake
@@ -49,6 +49,7 @@ set(async_smtp_files
async/smtp/MCSMTPCheckAccountOperation.cc
async/smtp/MCSMTPDisconnectOperation.cc
async/smtp/MCSMTPOperation.cc
+ async/smtp/MCSMTPLoginOperation.cc
async/smtp/MCSMTPSendWithDataOperation.cc
async/smtp/MCSMTPNoopOperation.cc
)
diff --git a/src/cmake/objc.cmake b/src/cmake/objc.cmake
index cdf09dd6..0de041e7 100644
--- a/src/cmake/objc.cmake
+++ b/src/cmake/objc.cmake
@@ -70,6 +70,7 @@ set(objc_rfc822_files
set(objc_smtp_files
objc/smtp/MCOSMTPOperation.mm
+ objc/smtp/MCOSMTPLoginOperation.mm
objc/smtp/MCOSMTPSendOperation.mm
objc/smtp/MCOSMTPNoopOperation.mm
objc/smtp/MCOSMTPSession.mm
diff --git a/src/core/smtp/MCSMTPSession.h b/src/core/smtp/MCSMTPSession.h
index 844369f6..4f7c9135 100644
--- a/src/core/smtp/MCSMTPSession.h
+++ b/src/core/smtp/MCSMTPSession.h
@@ -95,13 +95,13 @@ namespace mailcore {
void setup();
void unsetup();
void connectIfNeeded(ErrorCode * pError);
- void loginIfNeeded(ErrorCode * pError);
bool checkCertificate();
void sendMessage(MessageBuilder * msg, SMTPProgressCallback * callback, ErrorCode * pError);
public: // private
virtual bool isDisconnected();
+ virtual void loginIfNeeded(ErrorCode * pError);
};
}
diff --git a/src/objc/smtp/MCOSMTPLoginOperation.h b/src/objc/smtp/MCOSMTPLoginOperation.h
new file mode 100644
index 00000000..e7ffc641
--- /dev/null
+++ b/src/objc/smtp/MCOSMTPLoginOperation.h
@@ -0,0 +1,32 @@
+//
+// MCOSMTPLoginOperation.h
+// mailcore2
+//
+// Created by Hironori Yoshida on 10/29/14.
+// Copyright (c) 2014 MailCore. All rights reserved.
+//
+
+#ifndef MAILCORE_MCOSMTPLOGINOPERATION_H
+
+#define MAILCORE_MCOSMTPLOGINOPERATION_H
+
+#import <MailCore/MCOSMTPOperation.h>
+
+/** This is an asynchronous operation that will perform a noop operation through SMTP. */
+@interface MCOSMTPLoginOperation : MCOSMTPOperation
+
+/*
+ Starts the asynchronous operation.
+
+ @param completionBlock Called when the operation is finished.
+
+ - On success `error` will be nil
+
+ - On failure, `error` will be set with `MCOErrorDomain` as domain and an
+ error code available in MCOConstants.h,
+ */
+- (void) start:(void (^)(NSError * error))completionBlock;
+
+@end
+
+#endif
diff --git a/src/objc/smtp/MCOSMTPLoginOperation.mm b/src/objc/smtp/MCOSMTPLoginOperation.mm
new file mode 100644
index 00000000..f84163da
--- /dev/null
+++ b/src/objc/smtp/MCOSMTPLoginOperation.mm
@@ -0,0 +1,66 @@
+//
+// MCOSMTPLoginOperation.m
+// mailcore2
+//
+// Created by Hironori Yoshida on 10/29/14.
+// Copyright (c) 2014 MailCore. All rights reserved.
+//
+
+#import "MCOSMTPLoginOperation.h"
+
+#include "MCSMTPLoginOperation.h"
+
+#import "MCOUtils.h"
+#import "MCOOperation+Private.h"
+
+typedef void (^CompletionType)(NSError *error);
+
+@implementation MCOSMTPLoginOperation {
+ CompletionType _completionBlock;
+}
+
+#define nativeType mailcore::SMTPLoginOperation
+
++ (void) load
+{
+ MCORegisterClass(self, &typeid(nativeType));
+}
+
++ (NSObject *) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ nativeType * op = (nativeType *) object;
+ return [[[self alloc] initWithMCOperation:op] autorelease];
+}
+
+- (void) dealloc
+{
+ [_completionBlock release];
+ [super dealloc];
+}
+
+- (void) start:(void (^)(NSError *error))completionBlock
+{
+ _completionBlock = [completionBlock copy];
+ [self start];
+}
+
+- (void) cancel
+{
+ [_completionBlock release];
+ _completionBlock = nil;
+ [super cancel];
+}
+
+- (void)operationCompleted
+{
+ if (_completionBlock == NULL)
+ return;
+
+ NSError * error = [NSError mco_errorWithErrorCode:MCO_NATIVE_INSTANCE->error()];
+ _completionBlock(error);
+ [_completionBlock release];
+ _completionBlock = NULL;
+}
+
+
+@end
diff --git a/src/objc/smtp/MCOSMTPSession.h b/src/objc/smtp/MCOSMTPSession.h
index 286cd7c3..db9056b8 100644
--- a/src/objc/smtp/MCOSMTPSession.h
+++ b/src/objc/smtp/MCOSMTPSession.h
@@ -89,6 +89,16 @@
/** @name Operations */
/**
+ Returns an operation that will perform a login.
+
+ MCOSMTPOperation * op = [session loginOperation];
+ [op start:^(NSError * error) {
+ ...
+ }];
+ */
+- (MCOSMTPOperation *) loginOperation;
+
+/**
Returns an operation that will send the given message through SMTP.
It will use the recipient set in the message data (To, Cc and Bcc).
It will also filter out Bcc from the content of the message.
diff --git a/src/objc/smtp/MCOSMTPSession.mm b/src/objc/smtp/MCOSMTPSession.mm
index e0eb2a7d..6b40c709 100644
--- a/src/objc/smtp/MCOSMTPSession.mm
+++ b/src/objc/smtp/MCOSMTPSession.mm
@@ -11,6 +11,7 @@
#include "MCAsyncSMTP.h"
#import "MCOUtils.h"
+#import "MCOSMTPLoginOperation.h"
#import "MCOSMTPSendOperation.h"
#import "MCOSMTPNoopOperation.h"
#import "MCOSMTPOperation.h"
@@ -104,6 +105,14 @@ MCO_OBJC_SYNTHESIZE_SCALAR(dispatch_queue_t, dispatch_queue_t, setDispatchQueue,
#pragma mark - Operations
+- (MCOSMTPOperation *) loginOperation
+{
+ mailcore::SMTPOperation * coreOp = MCO_NATIVE_INSTANCE->loginOperation();
+ MCOSMTPLoginOperation * result = [[[MCOSMTPLoginOperation alloc] initWithMCOperation:coreOp] autorelease];
+ [result setSession:self];
+ return result;
+}
+
- (MCOSMTPSendOperation *) sendOperationWithData:(NSData *)messageData
{
mailcore::SMTPOperation * coreOp = MCO_NATIVE_INSTANCE->sendMessageOperation([messageData mco_mcData]);