diff options
author | Hoa V. DINH <dinh.viet.hoa@gmail.com> | 2016-03-03 22:45:19 -0800 |
---|---|---|
committer | Hoa V. DINH <dinh.viet.hoa@gmail.com> | 2016-03-03 22:45:19 -0800 |
commit | a55c8f370bd663ea1d31fed230987711aa1cf176 (patch) | |
tree | 567a995e2f0565d24aebff0fab959d3c95045670 /src/objc | |
parent | 886aae2ab94c74a4d4c644c446f67d37a333c1f9 (diff) |
Thread safety on logger
Diffstat (limited to 'src/objc')
-rw-r--r-- | src/objc/provider/MCOAccountValidator.h | 3 | ||||
-rw-r--r-- | src/objc/provider/MCOAccountValidator.mm | 47 |
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 |