diff options
author | CodaFi <devteam.codafi@gmail.com> | 2013-04-28 17:37:52 -0600 |
---|---|---|
committer | CodaFi <devteam.codafi@gmail.com> | 2013-04-28 17:37:52 -0600 |
commit | d9da8ea6e22361a35c0bf94237c8c16d5021a3b4 (patch) | |
tree | e5e68ac9a9906d128c2179b82cd8b60c8a64c721 /src | |
parent | 10c9d0abf0e8009277fb2006cffb76b8a26865c7 (diff) |
Providers API
Diffstat (limited to 'src')
-rw-r--r-- | src/core/MCCore.h | 1 | ||||
-rw-r--r-- | src/core/provider/MCMailProvider.cc | 211 | ||||
-rw-r--r-- | src/core/provider/MCMailProvider.h | 64 | ||||
-rw-r--r-- | src/core/provider/MCMailProvidersManager.cc | 70 | ||||
-rw-r--r-- | src/core/provider/MCMailProvidersManager.h | 49 | ||||
-rw-r--r-- | src/core/provider/MCNetService.cc | 102 | ||||
-rw-r--r-- | src/core/provider/MCNetService.h | 48 | ||||
-rw-r--r-- | src/core/provider/MCProvider.h | 16 | ||||
-rw-r--r-- | src/objc/provider/MCOMailProvider.h | 32 | ||||
-rw-r--r-- | src/objc/provider/MCOMailProvider.mm | 113 | ||||
-rw-r--r-- | src/objc/provider/MCOMailProvidersManager.h | 23 | ||||
-rw-r--r-- | src/objc/provider/MCOMailProvidersManager.mm | 69 | ||||
-rw-r--r-- | src/objc/provider/MCONetService.h | 29 | ||||
-rw-r--r-- | src/objc/provider/MCONetService.mm | 90 |
14 files changed, 917 insertions, 0 deletions
diff --git a/src/core/MCCore.h b/src/core/MCCore.h index 952ae1b5..24351281 100644 --- a/src/core/MCCore.h +++ b/src/core/MCCore.h @@ -16,5 +16,6 @@ #include <MailCore/MCRFC822.h> #include <MailCore/MCSMTP.h> #include <MailCore/MCRenderer.h> +#include <MailCore/MCProvider.h> #endif diff --git a/src/core/provider/MCMailProvider.cc b/src/core/provider/MCMailProvider.cc new file mode 100644 index 00000000..e9f64872 --- /dev/null +++ b/src/core/provider/MCMailProvider.cc @@ -0,0 +1,211 @@ +// +// MCMailProvider.cpp +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCMailProvider.h" +#include "MCNetService.h" +#include "MCIterator.h" +#include "MCJSON.h" + +#include <regex.h> + +using namespace mailcore; + +void MailProvider::init() +{ + mImapServices = new Array(); + mSmtpServices = new Array(); + mPopServices = new Array(); + mMxSet = new Set(); +} + +void MailProvider::initWihInfo(HashMap * info) +{ + init(); + + Array * imapInfos; + Array * smtpInfos; + Array * popInfos; + HashMap * serverInfo; + Array * mxs; + + mDomainMatch = (Array *) info->objectForKey(MCSTR("domain-match"))->retain(); + mMailboxPaths = (HashMap *) info->objectForKey(MCSTR("mailboxes"))->retain(); + mxs = (Array *) info->objectForKey(MCSTR("mx")); + mc_foreacharray(String, mx, mxs) { + mMxSet->addObject(mx->lowercaseString()); + } + + serverInfo = (HashMap *) info->objectForKey(MCSTR("servers")); + imapInfos = (Array *) serverInfo->objectForKey(MCSTR("imap")); + smtpInfos = (Array *) serverInfo->objectForKey(MCSTR("smtp")); + popInfos = (Array *) serverInfo->objectForKey(MCSTR("pop")); + + mc_foreacharray(HashMap, imapInfo, imapInfos) { + NetService * service; + + service = new NetService(imapInfo); + mImapServices->addObject(service); + service->release(); + } + + mc_foreacharray(HashMap, smtpInfo, smtpInfos) { + NetService * service; + + service = new NetService(smtpInfo); + mSmtpServices->addObject(service); + service->release(); + } + + mc_foreacharray(HashMap, popInfo, popInfos) { + NetService * service; + + service = new NetService(popInfo); + mPopServices->addObject(service); + service->release(); + } +} + +MailProvider::MailProvider(HashMap * info) +{ + initWihInfo(info); +} + +MailProvider::MailProvider(Data * infoData) { + initWihInfo((HashMap *) JSON::objectFromJSONData(infoData)); +} + +MailProvider::~MailProvider() { + delete mImapServices; + delete mSmtpServices; + delete mPopServices; + delete mMxSet; + delete mDomainMatch; + delete mMailboxPaths; + delete mIdentifier; +} + +void MailProvider::setIdentifier(String * identifier) { + mIdentifier = identifier; +} + +String * MailProvider::identifier() { + return mIdentifier; +} + +Array * MailProvider::imapServices() +{ + return mImapServices; +} + +Array * MailProvider::smtpServices() +{ + return mSmtpServices; +} + +Array * MailProvider::popServices() +{ + return mPopServices; +} + +bool MailProvider::matchEmail(String * email) +{ + Array * components; + String * domain; + const char * cDomain; + + components = email->componentsSeparatedByString(MCSTR("@")); + if (components->count() < 2) + return false; + + domain = (String *) components->lastObject(); + cDomain = domain->UTF8Characters(); + + mc_foreacharray(String, match, mDomainMatch) { + regex_t r; + bool matched; + + match = String::stringWithUTF8Format("^%s$", match->UTF8Characters()); + if (regcomp(&r, match->UTF8Characters(), REG_EXTENDED | REG_ICASE | REG_NOSUB) != 0) + continue; + + matched = false; + if (regexec(&r, cDomain, 0, NULL, 0) == 0) { + matched = true; + } + + regfree(&r); + + if (matched) + return true; + } + + return false; +} + +bool MailProvider::matchMX(String * hostname) +{ + return mMxSet->containsObject(hostname->lowercaseString()); +} + +String * MailProvider::sentMailFolderPath() +{ + return (String *) mMailboxPaths->objectForKey(MCSTR("sentmail")); +} + +String * MailProvider::starredFolderPath() +{ + return (String *) mMailboxPaths->objectForKey(MCSTR("starred")); +} + +String * MailProvider::allMailFolderPath() +{ + return (String *) mMailboxPaths->objectForKey(MCSTR("allmail")); +} + +String * MailProvider::trashFolderPath() +{ + return (String *) mMailboxPaths->objectForKey(MCSTR("trash")); +} + +String * MailProvider::draftsFolderPath() +{ + return (String *) mMailboxPaths->objectForKey(MCSTR("drafts")); +} + +String * MailProvider::spamFolderPath() +{ + return (String *) mMailboxPaths->objectForKey(MCSTR("spam")); +} + +String * MailProvider::importantFolderPath() +{ + return (String *) mMailboxPaths->objectForKey(MCSTR("important")); +} + +bool MailProvider::isMainFolder(String * folderPath, String * prefix) +{ + mc_foreachdictionaryValue(Object, path, mMailboxPaths) { + String * fullPath; + + if (prefix != NULL) { + fullPath = prefix->stringByAppendingString((String *) path); + } + else { + fullPath = (String *) path; + } + + if (fullPath->isEqual(folderPath)) + return true; + } + + return false; +} + +String * MailProvider::description() { + return String::stringWithUTF8Format("<%s:%p, %s>", className()->UTF8Characters(), this, identifier()); +} diff --git a/src/core/provider/MCMailProvider.h b/src/core/provider/MCMailProvider.h new file mode 100644 index 00000000..04f46750 --- /dev/null +++ b/src/core/provider/MCMailProvider.h @@ -0,0 +1,64 @@ +// +// MCMailProvider.h +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef __MAILCORE__MCMailProvider__ +#define __MAILCORE__MCMailProvider__ + +#include <MailCore/MCBaseTypes.h> + +#ifdef __cplusplus + +namespace mailcore { + class NetService; + + class MailProvider : public Object { + + public: + MailProvider(HashMap * info); + MailProvider(Data * infoData); + ~MailProvider(); + + void setIdentifier(String * identifier); + String * identifier(); + + Array * imapServices(); + Array * smtpServices(); + Array * popServices(); + + bool matchEmail(String * email); + bool matchMX(String * hostname); + + String * sentMailFolderPath(); + String * starredFolderPath(); + String * allMailFolderPath(); + String * trashFolderPath(); + String * draftsFolderPath(); + String * spamFolderPath(); + String * importantFolderPath(); + + bool isMainFolder(String * folderPath, String * prefix); + + virtual String * description(); + + private: + String * mIdentifier; + Array * mDomainMatch; + Array * mImapServices; + Array * mSmtpServices; + Array * mPopServices; + HashMap * mMailboxPaths; + Set* mMxSet; + + void init(); + void initWihInfo(HashMap * info); + }; +}; + +#endif + +#endif /* defined(__MAILCORE__MCMailProvider__) */ diff --git a/src/core/provider/MCMailProvidersManager.cc b/src/core/provider/MCMailProvidersManager.cc new file mode 100644 index 00000000..0b45f4da --- /dev/null +++ b/src/core/provider/MCMailProvidersManager.cc @@ -0,0 +1,70 @@ +// +// MCMailProvidersManager.cpp +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCMailProvidersManager.h" +#include "MCMailProvider.h" +#include "MCJSON.h" + +using namespace mailcore; + +void MailProvidersManager::init() +{ + mProviders = new HashMap(); +} + +MailProvider * MailProvidersManager::providerForEmail(String * email) +{ + mc_foreachdictionaryValue(Object, identifier, mProviders) { + MailProvider * provider; + + provider = (MailProvider *) mProviders->objectForKey(identifier); + if (provider->matchEmail(email)) + return provider; + } + + return NULL; +} + +MailProvider * MailProvidersManager::providerForMX(String * hostname) +{ + mc_foreachdictionaryValue(Object, identifier, mProviders) { + MailProvider * provider; + + provider = (MailProvider *) mProviders->objectForKey(identifier); + if (provider->matchMX(hostname)) + return provider; + } + + return NULL; +} + +MailProvider * MailProvidersManager::providerForIdentifier(String * identifier) +{ + return (MailProvider *) mProviders->objectForKey(identifier); +} + +void MailProvidersManager::registerProviders(HashMap * providers) +{ + mc_foreachdictionaryValue(Object, identifier, providers) { + MailProvider * provider; + + provider = new MailProvider((HashMap *) providers->objectForKey(identifier)); + provider->setIdentifier((String *) identifier); + mProviders->setObjectForKey(provider, identifier); + provider->release(); + } +} + +void MailProvidersManager::registerProvidersFilename(String * filename) +{ + HashMap * providersInfos; + + providersInfos = (HashMap *) JSON::objectFromJSONData(Data::dataWithContentsOfFile(filename)); + registerProviders(providersInfos); + providersInfos->release(); +} diff --git a/src/core/provider/MCMailProvidersManager.h b/src/core/provider/MCMailProvidersManager.h new file mode 100644 index 00000000..978ec7d9 --- /dev/null +++ b/src/core/provider/MCMailProvidersManager.h @@ -0,0 +1,49 @@ +// +// MCMailProvidersManager.h +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef __MAILCORE__MCMailProvidersManager__ +#define __MAILCORE__MCMailProvidersManager__ + +#include <MailCore/MCBaseTypes.h> + +#ifdef __cplusplus + +namespace mailcore { + class MailProvider; + + class MailProvidersManager : public Object { + + public: + static MailProvidersManager * sharedManager() + { + static MailProvidersManager * instance = new MailProvidersManager(); + instance->init(); + return instance; + } + + MailProvider * providerForEmail(String * email); + MailProvider * providerForMX(String * hostname); + MailProvider * providerForIdentifier(String * identifier); + + void registerProviders(HashMap * providers); + void registerProvidersFilename(String * filename); + + private: + MailProvidersManager() {}; + MailProvidersManager(MailProvidersManager const&); + void operator=(MailProvidersManager const&); + + HashMap * mProviders; + + void init(); + }; +} + +#endif + +#endif /* defined(__MAILCORE__MCMailProvidersManager__) */ diff --git a/src/core/provider/MCNetService.cc b/src/core/provider/MCNetService.cc new file mode 100644 index 00000000..0ffcbaef --- /dev/null +++ b/src/core/provider/MCNetService.cc @@ -0,0 +1,102 @@ +// +// MCNetService.cpp +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#include "MCNetService.h" + +using namespace mailcore; + +void NetService::init() { + +} + +NetService::NetService(HashMap * info) { + init(); + + bool ssl; + bool starttls; + + this->setHostname((String *) info->objectForKey(MCSTR("hostname"))); + this->setPort(((Value *) info->objectForKey(MCSTR("port")))->intValue()); + ssl = ((Value *) info->objectForKey(MCSTR("ssl")))->boolValue(); + starttls = ((Value *) info->objectForKey(MCSTR("starttls")))->boolValue(); + if (ssl) { + mConnectionType = ConnectionTypeTLS; + } + else if (starttls) { + mConnectionType = ConnectionTypeStartTLS; + } + else { + mConnectionType = ConnectionTypeClear; + } +} + +NetService::~NetService() { + delete mHostname; +} + +void NetService::setHostname(String *hostname) +{ + mHostname = hostname; +} + +String * NetService::hostname() +{ + return mHostname; +} + +void NetService::setPort(unsigned int port) +{ + mPort = port; +} + +unsigned int NetService::port() +{ + return mPort; +} + +void NetService::setConnectionType(ConnectionType connectionType) +{ + mConnectionType = connectionType; +} + +ConnectionType NetService::connectionType() +{ + return mConnectionType; +} + +String * NetService::normalizedHostnameWithEmail(String * email) { + Array *components = email->componentsSeparatedByString(MCSTR("@")); + String *hostname = (String *) mHostname->copy(); + if (components->count() != 0) { + hostname->replaceOccurrencesOfString(MCSTR("{domain}"), (String *) components->lastObject()); + return hostname; + } + return mHostname; +} + +HashMap * NetService::info() { + HashMap * result; + + result = new HashMap(); + if (mHostname != NULL) { + result->setObjectForKey(mHostname, MCSTR("hostname")); + } + if (mPort != 0) { + result->setObjectForKey(Value::valueWithIntValue(mPort), MCSTR("port")); + } + switch (mConnectionType & ConnectionTypeMask) { + case ConnectionTypeTLS: + result->setObjectForKey(Value::valueWithBoolValue(true), MCSTR("ssl")); + break; + case ConnectionTypeStartTLS: + result->setObjectForKey(Value::valueWithBoolValue(true), MCSTR("starttls")); + break; + } + + return result; +} diff --git a/src/core/provider/MCNetService.h b/src/core/provider/MCNetService.h new file mode 100644 index 00000000..c2560ec3 --- /dev/null +++ b/src/core/provider/MCNetService.h @@ -0,0 +1,48 @@ +// +// MCNetService.h +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef __MAILCORE__MCNetService__ +#define __MAILCORE__MCNetService__ + +#include <MailCore/MCBaseTypes.h> +#include <MailCore/MCMessageConstants.h> + +#ifdef __cplusplus + +namespace mailcore { + class NetService : public Object { + + public: + NetService(HashMap * info); + ~NetService(); + + void setHostname(String * hostname); + String * hostname(); + + void setPort(unsigned int port); + unsigned int port(); + + void setConnectionType(ConnectionType connectionType); + ConnectionType connectionType(); + + HashMap * info(); + + String * normalizedHostnameWithEmail(String * email); + + private: + String * mHostname; + unsigned int mPort; + ConnectionType mConnectionType; + + void init(); + }; +} + +#endif + +#endif /* defined(__MAILCORE__MCNetService__) */ diff --git a/src/core/provider/MCProvider.h b/src/core/provider/MCProvider.h new file mode 100644 index 00000000..ef3c2f8c --- /dev/null +++ b/src/core/provider/MCProvider.h @@ -0,0 +1,16 @@ +// +// MCProvider.h +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef __MAILCORE_MCPROVIDER_H_ +#define __MAILCORE_MCPROVIDER_H_ + +#include <MailCore/MCMailProvidersManager.h> +#include <MailCore/MCMailProvider.h> +#include <MailCore/MCNetService.h> + +#endif diff --git a/src/objc/provider/MCOMailProvider.h b/src/objc/provider/MCOMailProvider.h new file mode 100644 index 00000000..6a5ed9b4 --- /dev/null +++ b/src/objc/provider/MCOMailProvider.h @@ -0,0 +1,32 @@ +// +// MCOMailProvider.h +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#import <Foundation/Foundation.h> + +@interface MCOMailProvider : NSObject + +@property (nonatomic, copy) NSString * identifier; + +- (id) initWithInfo:(NSDictionary *)info; + +- (NSArray *) imapServices; +- (NSArray *) smtpServices; +- (NSArray *) popServices; + +- (BOOL) matchEmail:(NSString *)email; +- (BOOL) matchMX:(NSString *)hostname; + +- (NSString *) sentMailFolderPath; +- (NSString *) starredFolderPath; +- (NSString *) allMailFolderPath; +- (NSString *) trashFolderPath; +- (NSString *) draftsFolderPath; +- (NSString *) spamFolderPath; +- (NSString *) importantFolderPath; + +@end diff --git a/src/objc/provider/MCOMailProvider.mm b/src/objc/provider/MCOMailProvider.mm new file mode 100644 index 00000000..4eb5f9fb --- /dev/null +++ b/src/objc/provider/MCOMailProvider.mm @@ -0,0 +1,113 @@ +// +// MCOMailProvider.m +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#import "MCOMailProvider.h" +#include "MCMailProvider.h" + +#import "NSDictionary+MCO.h" +#import "NSArray+MCO.h" +#import "NSString+MCO.h" + +@implementation MCOMailProvider { + mailcore::MailProvider * _provider; +} + +- (mailcore::Object *) mco_mcObject +{ + return _provider; +} + ++ (NSObject *) mco_objectWithMCObject:(mailcore::Object *)object +{ + mailcore::MailProvider * provider = (mailcore::MailProvider *) object; + return [[self alloc] initWithProvider:provider]; +} + +- (id) initWithInfo:(NSDictionary *)info +{ + self = [super init]; + + _provider = new mailcore::MailProvider([info mco_mcHashMap]); + + return self; +} + +- (id) initWithProvider:(mailcore::MailProvider *)provider +{ + self = [super init]; + + _provider = provider; + + return self; +} + +- (NSArray *) imapServices +{ + return [NSArray mco_arrayWithMCArray:_provider->imapServices()]; +} + +- (NSArray *) smtpServices +{ + return [NSArray mco_arrayWithMCArray:_provider->smtpServices()]; +} + +- (NSArray *) popServices +{ + return [NSArray mco_arrayWithMCArray:_provider->popServices()]; +} + +- (BOOL) matchEmail:(NSString *)email +{ + return _provider->matchEmail(email.mco_mcString); +} + +- (BOOL) matchMX:(NSString *)hostname +{ + return _provider->matchMX(hostname.mco_mcString); +} + +- (NSString *) sentMailFolderPath +{ + return [NSString mco_stringWithMCString:_provider->sentMailFolderPath()]; +} + +- (NSString *) starredFolderPath +{ + return [NSString mco_stringWithMCString:_provider->starredFolderPath()]; +} + +- (NSString *) allMailFolderPath +{ + return [NSString mco_stringWithMCString:_provider->allMailFolderPath()]; +} + +- (NSString *) trashFolderPath +{ + return [NSString mco_stringWithMCString:_provider->trashFolderPath()]; +} + +- (NSString *) draftsFolderPath +{ + return [NSString mco_stringWithMCString:_provider->draftsFolderPath()]; +} + +- (NSString *) spamFolderPath +{ + return [NSString mco_stringWithMCString:_provider->spamFolderPath()]; +} + +- (NSString *) importantFolderPath +{ + return [NSString mco_stringWithMCString:_provider->spamFolderPath()]; +} + +- (BOOL) isMainFolder:(NSString *)folderPath prefix:(NSString *)prefix { + return _provider->isMainFolder(folderPath.mco_mcString, prefix.mco_mcString); +} + +@end diff --git a/src/objc/provider/MCOMailProvidersManager.h b/src/objc/provider/MCOMailProvidersManager.h new file mode 100644 index 00000000..55b5e6af --- /dev/null +++ b/src/objc/provider/MCOMailProvidersManager.h @@ -0,0 +1,23 @@ +// +// MCOMailProvidersManager.h +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#import <Foundation/Foundation.h> + +@class MCOMailProvider; + +@interface MCOMailProvidersManager : NSObject + ++ (MCOMailProvidersManager *) sharedManager; + +- (MCOMailProvider *) providerForEmail:(NSString *)email; +- (MCOMailProvider *) providerForMX:(NSString *)hostname; +- (MCOMailProvider *) providerForIdentifier:(NSString *)identifier; +- (void) registerProviders:(NSDictionary *)providers; +- (void) registerProvidersFilename:(NSString *)filename; + +@end diff --git a/src/objc/provider/MCOMailProvidersManager.mm b/src/objc/provider/MCOMailProvidersManager.mm new file mode 100644 index 00000000..f7b11cb9 --- /dev/null +++ b/src/objc/provider/MCOMailProvidersManager.mm @@ -0,0 +1,69 @@ +// +// MCOMailProvidersManager.m +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#import "MCOMailProvidersManager.h" +#include "MCMailProvidersManager.h" +#import "MCOMailProvider.h" + +#import "NSString+MCO.h" +#import "NSDictionary+MCO.h" +#import "NSObject+MCO.h" + +@implementation MCOMailProvidersManager + ++ (MCOMailProvidersManager *) sharedManager +{ + static MCOMailProvidersManager *sharedInstance = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedInstance = [[self alloc] init]; \ + }); + return sharedInstance; +} + +- (id) init +{ + NSString * filename; + + self = [super init]; + + filename = [[NSBundle bundleForClass:[self class]] pathForResource:@"providers" ofType:@"json"]; + [self registerProvidersFilename:filename]; + + return self; +} + +- (void) registerProviders:(NSDictionary *)providers +{ + mailcore::MailProvidersManager::sharedManager()->registerProviders(providers.mco_mcHashMap); +} + +- (void) registerProvidersFilename:(NSString *)filename +{ + mailcore::MailProvidersManager::sharedManager()->registerProvidersFilename(filename.mco_mcString); +} + +- (MCOMailProvider *) providerForEmail:(NSString *)email +{ + mailcore::MailProvider *provider = mailcore::MailProvidersManager::sharedManager()->providerForEmail(email.mco_mcString); + return [MCOMailProvider mco_objectWithMCObject:(mailcore::Object *) provider]; +} + +- (MCOMailProvider *) providerForMX:(NSString *)hostname +{ + mailcore::MailProvider *provider = mailcore::MailProvidersManager::sharedManager()->providerForMX(hostname.mco_mcString); + return [MCOMailProvider mco_objectWithMCObject:(mailcore::Object *) provider]; +} + +- (MCOMailProvider *) providerForIdentifier:(NSString *)identifier +{ + mailcore::MailProvider *provider = mailcore::MailProvidersManager::sharedManager()->providerForIdentifier(identifier.mco_mcString); + return [MCOMailProvider mco_objectWithMCObject:(mailcore::Object *) provider]; +} + +@end diff --git a/src/objc/provider/MCONetService.h b/src/objc/provider/MCONetService.h new file mode 100644 index 00000000..e1e02141 --- /dev/null +++ b/src/objc/provider/MCONetService.h @@ -0,0 +1,29 @@ +// +// MCONetService.h +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#import <Foundation/Foundation.h> + +typedef enum { + MCONetServiceConnectionTypeClear = 1 << 0, + MCONetServiceConnectionTypeStartTLS = 1 << 1, + MCONetServiceConnectionTypeTLS = 1 << 2, + MCONetServiceConnectionTypeMask = (MCONetServiceConnectionTypeClear | MCONetServiceConnectionTypeStartTLS | MCONetServiceConnectionTypeTLS) +} MCONetServiceConnectionType; + +@interface MCONetService : NSObject + +@property (nonatomic, copy) NSString * hostname; +@property (nonatomic, assign) unsigned int port; +@property (nonatomic, assign) MCONetServiceConnectionType connectionType; + ++ (MCONetService *) netServiceWithInfo:(NSDictionary *)info; + +- (id) initWithInfo:(NSDictionary *)info; +- (NSDictionary *) info; + +@end diff --git a/src/objc/provider/MCONetService.mm b/src/objc/provider/MCONetService.mm new file mode 100644 index 00000000..eb2ad6f5 --- /dev/null +++ b/src/objc/provider/MCONetService.mm @@ -0,0 +1,90 @@ +// +// MCONetService.m +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#import "MCONetService.h" +#include "MCNetService.h" + +#import "NSDictionary+MCO.h" +#import "NSString+MCO.h" + +@implementation MCONetService { + mailcore::NetService * _netService; +} + +- (mailcore::Object *) mco_mcObject +{ + return _netService; +} + ++ (NSObject *) mco_objectWithMCObject:(mailcore::Object *)object +{ + mailcore::NetService * netService = (mailcore::NetService *) object; + return [[self alloc] initWithNetService:netService]; +} + ++ (MCONetService *) netServiceWithInfo:(NSDictionary *)info +{ + return [[[MCONetService alloc] initWithInfo:info] autorelease]; +} + +- (id) initWithInfo:(NSDictionary *)info +{ + self = [super init]; + + _netService = new mailcore::NetService(info.mco_mcHashMap); + + return self; +} + +- (id) initWithNetService:(mailcore::NetService *)netService +{ + self = [super init]; + + _netService = netService; + + return self; +} + +- (void) setHostname:(NSString *)hostname { + _netService->setHostname(hostname.mco_mcString); +} + +- (NSString *) hostname { + return [NSString mco_stringWithMCString:_netService->hostname()]; +} + +- (void) setPort:(unsigned int)port { + _netService->setPort(port); +} + +- (unsigned int) port { + return _netService->port(); +} + +- (MCONetServiceConnectionType) connectionType { + return (MCONetServiceConnectionType) _netService->connectionType(); +} + +- (NSDictionary *) info +{ + return [NSDictionary mco_dictionaryWithMCHashMap:_netService->info()]; +} + +- (NSString*)hostnameWithEmail:(NSString*)email +{ + NSString *result = nil; + NSArray *components = [email componentsSeparatedByString:@"@"]; + if (components.count == 0) { + return self.hostname; + } else { + result = [self.hostname stringByReplacingOccurrencesOfString:@"{domain}" withString:[components lastObject]]; + } + return [NSString mco_stringWithMCString:_netService->normalizedHostnameWithEmail(email.mco_mcString)]; +} + +@end |