aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/objc
diff options
context:
space:
mode:
authorGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2016-03-03 22:45:19 -0800
committerGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2016-03-03 22:45:19 -0800
commita55c8f370bd663ea1d31fed230987711aa1cf176 (patch)
tree567a995e2f0565d24aebff0fab959d3c95045670 /src/objc
parent886aae2ab94c74a4d4c644c446f67d37a333c1f9 (diff)
Thread safety on logger
Diffstat (limited to 'src/objc')
-rw-r--r--src/objc/provider/MCOAccountValidator.h3
-rw-r--r--src/objc/provider/MCOAccountValidator.mm47
2 files changed, 46 insertions, 4 deletions
diff --git a/src/objc/provider/MCOAccountValidator.h b/src/objc/provider/MCOAccountValidator.h
index b5f09bc2..8d6676b1 100644
--- a/src/objc/provider/MCOAccountValidator.h
+++ b/src/objc/provider/MCOAccountValidator.h
@@ -8,6 +8,7 @@
#import <Foundation/Foundation.h>
#import <MailCore/MCOOperation.h>
+#import <MailCore/MCOConstants.h>
/**
This class is used to validate an email provider and it's associated
@@ -34,6 +35,8 @@
@property (nonatomic, assign, getter=isPopEnabled) BOOL popEnabled;
@property (nonatomic, assign, getter=isSmtpEnabled) BOOL smtpEnabled;
+@property (nonatomic, copy) MCOConnectionLogger connectionLogger;
+
// result
@property (nonatomic, retain, readonly) NSString * identifier;
@property (nonatomic, retain, readonly) MCONetService * imapServer;
diff --git a/src/objc/provider/MCOAccountValidator.mm b/src/objc/provider/MCOAccountValidator.mm
index 0aa9a393..ab240bf5 100644
--- a/src/objc/provider/MCOAccountValidator.mm
+++ b/src/objc/provider/MCOAccountValidator.mm
@@ -20,10 +20,11 @@ typedef void (^CompletionType)(void);
@interface MCOAccountValidator ()
- (void) _operationCompleted;
+- (void) _logWithSender:(void *)sender connectionType:(MCOConnectionLogType)logType data:(NSData *)data;
@end
-class MCOValidatorOperationCallback: public mailcore::Object, public mailcore::OperationCallback {
+class MCOValidatorOperationCallback: public mailcore::Object, public mailcore::OperationCallback, public mailcore::ConnectionLogger {
public:
MCOValidatorOperationCallback(MCOAccountValidator * op)
{
@@ -35,6 +36,11 @@ public:
[mOperation _operationCompleted];
}
+ virtual void log(void * sender, mailcore::ConnectionLogType logType, mailcore::Data * data)
+ {
+ [mOperation _logWithSender:sender connectionType:(MCOConnectionLogType)logType data:MCO_TO_OBJC(data)];
+ }
+
private:
MCOAccountValidator * mOperation;
};
@@ -42,7 +48,8 @@ private:
@implementation MCOAccountValidator{
CompletionType _completionBlock;
mailcore::AccountValidator * _validator;
- MCOValidatorOperationCallback * _imapCallback;
+ MCOValidatorOperationCallback * _callback;
+ MCOConnectionLogger _connectionLogger;
}
#define nativeType mailcore::AccountValidator
@@ -84,13 +91,22 @@ MCO_OBJC_SYNTHESIZE_BOOL(setSmtpEnabled, isSmtpEnabled)
self = [super initWithMCOperation:validator];
_validator = validator;
- _imapCallback = new MCOValidatorOperationCallback(self);
- _validator->setCallback(_imapCallback);
+ _callback = new MCOValidatorOperationCallback(self);
+ _validator->setCallback(_callback);
_validator->retain();
return self;
}
+- (void) dealloc
+{
+ [_completionBlock release];
+ MC_SAFE_RELEASE(_validator);
+ MC_SAFE_RELEASE(_callback);
+ [_connectionLogger release];
+ [super dealloc];
+}
+
- (void) start:(void (^)(void))completionBlock
{
_completionBlock = [completionBlock copy];
@@ -150,4 +166,27 @@ MCO_OBJC_SYNTHESIZE_BOOL(setSmtpEnabled, isSmtpEnabled)
return [NSError mco_errorWithErrorCode:_validator->smtpError()];
}
+- (void) setConnectionLogger:(MCOConnectionLogger)connectionLogger
+{
+ [_connectionLogger release];
+ _connectionLogger = [connectionLogger copy];
+
+ if (_connectionLogger != nil) {
+ _validator->setConnectionLogger(_callback);
+ }
+ else {
+ _validator->setConnectionLogger(NULL);
+ }
+}
+
+- (MCOConnectionLogger) connectionLogger
+{
+ return _connectionLogger;
+}
+
+- (void) _logWithSender:(void *)sender connectionType:(MCOConnectionLogType)logType data:(NSData *)data
+{
+ _connectionLogger(sender, logType, data);
+}
+
@end