From 3f0bc2ba58901473f99a2be5a9c4f452e12db532 Mon Sep 17 00:00:00 2001 From: GRMrGecko Date: Sat, 13 Sep 2014 17:13:32 -0500 Subject: [PATCH] EmailScheduler Start. --- EmailScheduler.xcodeproj/project.pbxproj | 431 ++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 34042 bytes .../xcschemes/Build Directory.xcscheme | 59 + .../xcschemes/EmailScheduler.xcscheme | 86 + .../xcschemes/xcschememanagement.plist | 32 + EmailScheduler/EmailScheduler-Prefix.pch | 9 + EmailScheduler/EmailScheduler.1 | 79 + EmailScheduler/JSON/MGMJSON.h | 76 + EmailScheduler/JSON/MGMJSON.m | 542 +++ EmailScheduler/MGMController.h | 40 + EmailScheduler/MGMController.m | 137 + EmailScheduler/MGMEmail.h | 41 + EmailScheduler/MGMEmail.m | 68 + EmailScheduler/MGMHTTP/AsyncSocket.h | 659 +++ EmailScheduler/MGMHTTP/AsyncSocket.m | 4192 +++++++++++++++++ EmailScheduler/MGMHTTP/MGMHTTPAddons.h | 38 + EmailScheduler/MGMHTTP/MGMHTTPAddons.m | 89 + EmailScheduler/MGMHTTP/MGMHTTPClient.h | 157 + EmailScheduler/MGMHTTP/MGMHTTPClient.m | 1202 +++++ EmailScheduler/MGMHTTP/MGMHTTPDefines.h | 27 + EmailScheduler/MGMHTTP/MGMHTTPResponse.h | 59 + EmailScheduler/MGMHTTP/MGMHTTPResponse.m | 131 + EmailScheduler/MGMHTTP/MGMHTTPServer.h | 88 + EmailScheduler/MGMHTTP/MGMHTTPServer.m | 207 + EmailScheduler/MGMHTTPClientClass.h | 34 + EmailScheduler/MGMHTTPClientClass.m | 87 + EmailScheduler/main.m | 38 + MailCore.framework/Headers | 1 + MailCore.framework/MailCore | 1 + MailCore.framework/Resources | 1 + .../Versions/A/Headers/MCAbstract.h | 13 + .../Versions/A/Headers/MCAbstractMessage.h | 46 + .../A/Headers/MCAbstractMessagePart.h | 45 + .../Versions/A/Headers/MCAbstractMultipart.h | 39 + .../Versions/A/Headers/MCAbstractPart.h | 80 + .../Versions/A/Headers/MCAddress.h | 65 + .../Versions/A/Headers/MCAddressDisplay.h | 34 + .../Versions/A/Headers/MCArray.h | 58 + .../Versions/A/Headers/MCAssert.h | 15 + .../Versions/A/Headers/MCAsync.h | 18 + .../Versions/A/Headers/MCAsyncIMAP.h | 35 + .../Versions/A/Headers/MCAsyncNNTP.h | 21 + .../Versions/A/Headers/MCAsyncPOP.h | 20 + .../Versions/A/Headers/MCAsyncSMTP.h | 17 + .../Versions/A/Headers/MCAttachment.h | 63 + .../Versions/A/Headers/MCAutoreleasePool.h | 44 + .../Versions/A/Headers/MCBaseTypes.h | 30 + .../Versions/A/Headers/MCConnectionLogger.h | 45 + .../Versions/A/Headers/MCCore.h | 23 + .../Versions/A/Headers/MCData.h | 68 + .../Versions/A/Headers/MCDateFormatter.h | 75 + .../A/Headers/MCHTMLRendererCallback.h | 61 + .../Versions/A/Headers/MCHash.h | 15 + .../Versions/A/Headers/MCHashMap.h | 52 + .../Versions/A/Headers/MCICUTypes.h | 19 + .../Versions/A/Headers/MCIMAP.h | 19 + .../A/Headers/MCIMAPAppendMessageOperation.h | 55 + .../Versions/A/Headers/MCIMAPAsyncSession.h | 206 + .../A/Headers/MCIMAPCapabilityOperation.h | 38 + .../A/Headers/MCIMAPConnectOperation.h | 28 + .../A/Headers/MCIMAPCopyMessagesOperation.h | 46 + .../A/Headers/MCIMAPFetchContentOperation.h | 51 + .../A/Headers/MCIMAPFetchFoldersOperation.h | 44 + .../A/Headers/MCIMAPFetchMessagesOperation.h | 61 + .../A/Headers/MCIMAPFetchNamespaceOperation.h | 39 + .../Versions/A/Headers/MCIMAPFolder.h | 42 + .../A/Headers/MCIMAPFolderInfoOperation.h | 49 + .../Versions/A/Headers/MCIMAPFolderStatus.h | 64 + .../A/Headers/MCIMAPFolderStatusOperation.h | 41 + .../Versions/A/Headers/MCIMAPIdentity.h | 54 + .../A/Headers/MCIMAPIdentityOperation.h | 45 + .../Versions/A/Headers/MCIMAPIdleOperation.h | 46 + .../Versions/A/Headers/MCIMAPMessage.h | 88 + .../Versions/A/Headers/MCIMAPMessagePart.h | 34 + .../Headers/MCIMAPMessageRenderingOperation.h | 48 + .../Versions/A/Headers/MCIMAPMultipart.h | 34 + .../Versions/A/Headers/MCIMAPNamespace.h | 51 + .../Versions/A/Headers/MCIMAPNamespaceItem.h | 46 + .../Versions/A/Headers/MCIMAPNoopOperation.h | 32 + .../Versions/A/Headers/MCIMAPOperation.h | 73 + .../A/Headers/MCIMAPOperationCallback.h | 29 + .../Versions/A/Headers/MCIMAPPart.h | 66 + .../A/Headers/MCIMAPProgressCallback.h | 21 + .../Versions/A/Headers/MCIMAPQuotaOperation.h | 40 + .../A/Headers/MCIMAPSearchExpression.h | 85 + .../A/Headers/MCIMAPSearchOperation.h | 54 + .../Versions/A/Headers/MCIMAPSession.h | 279 ++ .../Versions/A/Headers/MCIMAPSyncResult.h | 39 + .../Versions/A/Headers/MCIndexSet.h | 75 + .../Versions/A/Headers/MCIterator.h | 186 + .../Versions/A/Headers/MCJSON.h | 38 + .../Versions/A/Headers/MCLibetpanTypes.h | 46 + MailCore.framework/Versions/A/Headers/MCLog.h | 28 + MailCore.framework/Versions/A/Headers/MCMD5.h | 25 + .../Versions/A/Headers/MCMailProvider.h | 75 + .../A/Headers/MCMailProvidersManager.h | 43 + .../Versions/A/Headers/MCMainThread.h | 20 + .../Versions/A/Headers/MCMessageBuilder.h | 68 + .../Versions/A/Headers/MCMessageConstants.h | 275 ++ .../Versions/A/Headers/MCMessageHeader.h | 112 + .../Versions/A/Headers/MCMessageParser.h | 51 + .../Versions/A/Headers/MCMessagePart.h | 26 + .../Versions/A/Headers/MCMultipart.h | 26 + .../Versions/A/Headers/MCNNTP.h | 9 + .../Versions/A/Headers/MCNNTPAsyncSession.h | 85 + .../A/Headers/MCNNTPCheckAccountOperation.h | 32 + .../A/Headers/MCNNTPFetchArticleOperation.h | 45 + .../A/Headers/MCNNTPFetchArticlesOperation.h | 41 + .../A/Headers/MCNNTPFetchHeaderOperation.h | 48 + .../Versions/A/Headers/MCNNTPGroupInfo.h | 38 + .../A/Headers/MCNNTPListNewsgroupsOperation.h | 41 + .../Versions/A/Headers/MCNNTPOperation.h | 53 + .../A/Headers/MCNNTPOperationCallback.h | 28 + .../A/Headers/MCNNTPProgressCallback.h | 20 + .../Versions/A/Headers/MCNNTPSession.h | 88 + .../Versions/A/Headers/MCNetService.h | 59 + .../Versions/A/Headers/MCNull.h | 28 + .../Versions/A/Headers/MCOAbstract.h | 23 + .../Versions/A/Headers/MCOAbstractMessage.h | 49 + .../A/Headers/MCOAbstractMessagePart.h | 30 + .../Versions/A/Headers/MCOAbstractMultipart.h | 23 + .../Versions/A/Headers/MCOAbstractPart.h | 87 + .../Versions/A/Headers/MCOAddress.h | 81 + .../Versions/A/Headers/MCOAttachment.h | 59 + .../Versions/A/Headers/MCOConstants.h | 438 ++ .../A/Headers/MCOHTMLRendererDelegate.h | 107 + .../A/Headers/MCOHTMLRendererIMAPDelegate.h | 52 + .../Versions/A/Headers/MCOIMAP.h | 44 + .../A/Headers/MCOIMAPAppendMessageOperation.h | 42 + .../Versions/A/Headers/MCOIMAPBaseOperation.h | 42 + .../A/Headers/MCOIMAPCapabilityOperation.h | 40 + .../A/Headers/MCOIMAPCopyMessagesOperation.h | 37 + .../A/Headers/MCOIMAPFetchContentOperation.h | 43 + .../A/Headers/MCOIMAPFetchFoldersOperation.h | 33 + .../A/Headers/MCOIMAPFetchMessagesOperation.h | 45 + .../Headers/MCOIMAPFetchNamespaceOperation.h | 39 + .../Versions/A/Headers/MCOIMAPFolder.h | 34 + .../Versions/A/Headers/MCOIMAPFolderInfo.h | 42 + .../A/Headers/MCOIMAPFolderInfoOperation.h | 39 + .../Versions/A/Headers/MCOIMAPFolderStatus.h | 39 + .../A/Headers/MCOIMAPFolderStatusOperation.h | 39 + .../Versions/A/Headers/MCOIMAPIdentity.h | 42 + .../A/Headers/MCOIMAPIdentityOperation.h | 39 + .../Versions/A/Headers/MCOIMAPIdleOperation.h | 40 + .../Versions/A/Headers/MCOIMAPMessage.h | 81 + .../Versions/A/Headers/MCOIMAPMessagePart.h | 24 + .../MCOIMAPMessageRenderingOperation.h | 35 + .../Versions/A/Headers/MCOIMAPMultipart.h | 24 + .../Versions/A/Headers/MCOIMAPNamespace.h | 55 + .../Versions/A/Headers/MCOIMAPNamespaceItem.h | 36 + .../Versions/A/Headers/MCOIMAPOperation.h | 33 + .../Versions/A/Headers/MCOIMAPPart.h | 38 + .../A/Headers/MCOIMAPQuotaOperation.h | 15 + .../A/Headers/MCOIMAPSearchExpression.h | 356 ++ .../A/Headers/MCOIMAPSearchOperation.h | 36 + .../Versions/A/Headers/MCOIMAPSession.h | 711 +++ .../Versions/A/Headers/MCOIndexSet.h | 74 + .../Versions/A/Headers/MCOMailProvider.h | 86 + .../A/Headers/MCOMailProvidersManager.h | 51 + .../Versions/A/Headers/MCOMessageBuilder.h | 80 + .../Versions/A/Headers/MCOMessageHeader.h | 101 + .../Versions/A/Headers/MCOMessageParser.h | 57 + .../Versions/A/Headers/MCOMessagePart.h | 21 + .../Versions/A/Headers/MCOMultipart.h | 21 + .../Versions/A/Headers/MCONNTP.h | 21 + .../A/Headers/MCONNTPDisconnectOperation.h | 21 + .../A/Headers/MCONNTPFetchArticleOperation.h | 39 + .../A/Headers/MCONNTPFetchArticlesOperation.h | 35 + .../A/Headers/MCONNTPFetchHeaderOperation.h | 39 + .../Versions/A/Headers/MCONNTPGroupInfo.h | 27 + .../Headers/MCONNTPListNewsgroupsOperation.h | 32 + .../Versions/A/Headers/MCONNTPOperation.h | 37 + .../Versions/A/Headers/MCONNTPSession.h | 137 + .../Versions/A/Headers/MCONetService.h | 41 + .../Versions/A/Headers/MCOObjectWrapper.h | 31 + .../Versions/A/Headers/MCOOperation.h | 41 + .../Versions/A/Headers/MCOPOP.h | 20 + .../A/Headers/MCOPOPFetchHeaderOperation.h | 39 + .../A/Headers/MCOPOPFetchMessageOperation.h | 39 + .../A/Headers/MCOPOPFetchMessagesOperation.h | 34 + .../Versions/A/Headers/MCOPOPMessageInfo.h | 31 + .../Versions/A/Headers/MCOPOPNoopOperation.h | 34 + .../Versions/A/Headers/MCOPOPOperation.h | 37 + .../Versions/A/Headers/MCOPOPSession.h | 155 + .../Versions/A/Headers/MCOProvider.h | 17 + .../Versions/A/Headers/MCORFC822.h | 19 + .../Versions/A/Headers/MCORange.h | 77 + .../Versions/A/Headers/MCOSMTP.h | 17 + .../Versions/A/Headers/MCOSMTPOperation.h | 33 + .../Versions/A/Headers/MCOSMTPSendOperation.h | 38 + .../Versions/A/Headers/MCOSMTPSession.h | 145 + .../Versions/A/Headers/MCOUtils.h | 28 + .../Versions/A/Headers/MCObjC.h | 26 + .../Versions/A/Headers/MCObject.h | 71 + .../Versions/A/Headers/MCOperation.h | 59 + .../Versions/A/Headers/MCOperationCallback.h | 20 + .../Versions/A/Headers/MCOperationQueue.h | 68 + MailCore.framework/Versions/A/Headers/MCPOP.h | 9 + .../Versions/A/Headers/MCPOPAsyncSession.h | 98 + .../A/Headers/MCPOPFetchHeaderOperation.h | 44 + .../A/Headers/MCPOPFetchMessageOperation.h | 41 + .../A/Headers/MCPOPFetchMessagesOperation.h | 37 + .../Versions/A/Headers/MCPOPMessageInfo.h | 42 + .../Versions/A/Headers/MCPOPNoopOperation.h | 32 + .../Versions/A/Headers/MCPOPOperation.h | 53 + .../A/Headers/MCPOPOperationCallback.h | 28 + .../A/Headers/MCPOPProgressCallback.h | 20 + .../Versions/A/Headers/MCPOPSession.h | 100 + .../Versions/A/Headers/MCProvider.h | 17 + .../Versions/A/Headers/MCRFC822.h | 11 + .../Versions/A/Headers/MCRange.h | 40 + .../Versions/A/Headers/MCRenderer.h | 17 + .../Versions/A/Headers/MCSMTP.h | 8 + .../Versions/A/Headers/MCSMTPAsyncSession.h | 90 + .../Versions/A/Headers/MCSMTPNoopOperation.h | 34 + .../Versions/A/Headers/MCSMTPOperation.h | 52 + .../A/Headers/MCSMTPOperationCallback.h | 28 + .../A/Headers/MCSMTPProgressCallback.h | 20 + .../Versions/A/Headers/MCSMTPSession.h | 111 + MailCore.framework/Versions/A/Headers/MCSet.h | 49 + .../Versions/A/Headers/MCSizeFormatter.h | 30 + .../Versions/A/Headers/MCString.h | 145 + .../Versions/A/Headers/MCUtils.h | 41 + .../Versions/A/Headers/MCValue.h | 111 + .../Versions/A/Headers/MailCore.h | 17 + .../Versions/A/Headers/NSArray+MCO.h | 31 + .../Versions/A/Headers/NSData+MCO.h | 31 + .../Versions/A/Headers/NSDictionary+MCO.h | 31 + .../Versions/A/Headers/NSError+MCO.h | 19 + .../Versions/A/Headers/NSIndexSet+MCO.h | 18 + .../Versions/A/Headers/NSObject+MCO.h | 109 + .../Versions/A/Headers/NSString+MCO.h | 41 + .../Versions/A/Headers/NSValue+MCO.h | 31 + MailCore.framework/Versions/A/MailCore | Bin 0 -> 8559804 bytes .../Versions/A/Resources/Info.plist | 42 + .../Versions/A/Resources/providers.json | 1022 ++++ MailCore.framework/Versions/Current | 1 + MailCore2 | 1 + build | 1 + com.mrgeckosmedia.EmailScheduler.plist | 16 + readme.md | 6 + 242 files changed, 21071 insertions(+) create mode 100644 EmailScheduler.xcodeproj/project.pbxproj create mode 100644 EmailScheduler.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 EmailScheduler.xcodeproj/project.xcworkspace/xcuserdata/grmrgecko.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 EmailScheduler.xcodeproj/xcuserdata/grmrgecko.xcuserdatad/xcschemes/Build Directory.xcscheme create mode 100644 EmailScheduler.xcodeproj/xcuserdata/grmrgecko.xcuserdatad/xcschemes/EmailScheduler.xcscheme create mode 100644 EmailScheduler.xcodeproj/xcuserdata/grmrgecko.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 EmailScheduler/EmailScheduler-Prefix.pch create mode 100644 EmailScheduler/EmailScheduler.1 create mode 100644 EmailScheduler/JSON/MGMJSON.h create mode 100644 EmailScheduler/JSON/MGMJSON.m create mode 100644 EmailScheduler/MGMController.h create mode 100644 EmailScheduler/MGMController.m create mode 100644 EmailScheduler/MGMEmail.h create mode 100644 EmailScheduler/MGMEmail.m create mode 100644 EmailScheduler/MGMHTTP/AsyncSocket.h create mode 100644 EmailScheduler/MGMHTTP/AsyncSocket.m create mode 100644 EmailScheduler/MGMHTTP/MGMHTTPAddons.h create mode 100644 EmailScheduler/MGMHTTP/MGMHTTPAddons.m create mode 100644 EmailScheduler/MGMHTTP/MGMHTTPClient.h create mode 100644 EmailScheduler/MGMHTTP/MGMHTTPClient.m create mode 100644 EmailScheduler/MGMHTTP/MGMHTTPDefines.h create mode 100644 EmailScheduler/MGMHTTP/MGMHTTPResponse.h create mode 100644 EmailScheduler/MGMHTTP/MGMHTTPResponse.m create mode 100644 EmailScheduler/MGMHTTP/MGMHTTPServer.h create mode 100644 EmailScheduler/MGMHTTP/MGMHTTPServer.m create mode 100644 EmailScheduler/MGMHTTPClientClass.h create mode 100644 EmailScheduler/MGMHTTPClientClass.m create mode 100644 EmailScheduler/main.m create mode 120000 MailCore.framework/Headers create mode 120000 MailCore.framework/MailCore create mode 120000 MailCore.framework/Resources create mode 100644 MailCore.framework/Versions/A/Headers/MCAbstract.h create mode 100644 MailCore.framework/Versions/A/Headers/MCAbstractMessage.h create mode 100644 MailCore.framework/Versions/A/Headers/MCAbstractMessagePart.h create mode 100644 MailCore.framework/Versions/A/Headers/MCAbstractMultipart.h create mode 100644 MailCore.framework/Versions/A/Headers/MCAbstractPart.h create mode 100644 MailCore.framework/Versions/A/Headers/MCAddress.h create mode 100644 MailCore.framework/Versions/A/Headers/MCAddressDisplay.h create mode 100644 MailCore.framework/Versions/A/Headers/MCArray.h create mode 100644 MailCore.framework/Versions/A/Headers/MCAssert.h create mode 100644 MailCore.framework/Versions/A/Headers/MCAsync.h create mode 100755 MailCore.framework/Versions/A/Headers/MCAsyncIMAP.h create mode 100644 MailCore.framework/Versions/A/Headers/MCAsyncNNTP.h create mode 100644 MailCore.framework/Versions/A/Headers/MCAsyncPOP.h create mode 100644 MailCore.framework/Versions/A/Headers/MCAsyncSMTP.h create mode 100644 MailCore.framework/Versions/A/Headers/MCAttachment.h create mode 100644 MailCore.framework/Versions/A/Headers/MCAutoreleasePool.h create mode 100644 MailCore.framework/Versions/A/Headers/MCBaseTypes.h create mode 100644 MailCore.framework/Versions/A/Headers/MCConnectionLogger.h create mode 100644 MailCore.framework/Versions/A/Headers/MCCore.h create mode 100644 MailCore.framework/Versions/A/Headers/MCData.h create mode 100644 MailCore.framework/Versions/A/Headers/MCDateFormatter.h create mode 100644 MailCore.framework/Versions/A/Headers/MCHTMLRendererCallback.h create mode 100644 MailCore.framework/Versions/A/Headers/MCHash.h create mode 100644 MailCore.framework/Versions/A/Headers/MCHashMap.h create mode 100644 MailCore.framework/Versions/A/Headers/MCICUTypes.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAP.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPAppendMessageOperation.h create mode 100755 MailCore.framework/Versions/A/Headers/MCIMAPAsyncSession.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPCapabilityOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPConnectOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPCopyMessagesOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPFetchContentOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPFetchFoldersOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPFetchMessagesOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPFetchNamespaceOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPFolder.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPFolderInfoOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPFolderStatus.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPFolderStatusOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPIdentity.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPIdentityOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPIdleOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPMessage.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPMessagePart.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPMessageRenderingOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPMultipart.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPNamespace.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPNamespaceItem.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPNoopOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPOperationCallback.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPPart.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPProgressCallback.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPQuotaOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPSearchExpression.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPSearchOperation.h create mode 100755 MailCore.framework/Versions/A/Headers/MCIMAPSession.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIMAPSyncResult.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIndexSet.h create mode 100644 MailCore.framework/Versions/A/Headers/MCIterator.h create mode 100644 MailCore.framework/Versions/A/Headers/MCJSON.h create mode 100644 MailCore.framework/Versions/A/Headers/MCLibetpanTypes.h create mode 100644 MailCore.framework/Versions/A/Headers/MCLog.h create mode 100644 MailCore.framework/Versions/A/Headers/MCMD5.h create mode 100644 MailCore.framework/Versions/A/Headers/MCMailProvider.h create mode 100644 MailCore.framework/Versions/A/Headers/MCMailProvidersManager.h create mode 100644 MailCore.framework/Versions/A/Headers/MCMainThread.h create mode 100644 MailCore.framework/Versions/A/Headers/MCMessageBuilder.h create mode 100644 MailCore.framework/Versions/A/Headers/MCMessageConstants.h create mode 100644 MailCore.framework/Versions/A/Headers/MCMessageHeader.h create mode 100644 MailCore.framework/Versions/A/Headers/MCMessageParser.h create mode 100644 MailCore.framework/Versions/A/Headers/MCMessagePart.h create mode 100644 MailCore.framework/Versions/A/Headers/MCMultipart.h create mode 100644 MailCore.framework/Versions/A/Headers/MCNNTP.h create mode 100644 MailCore.framework/Versions/A/Headers/MCNNTPAsyncSession.h create mode 100644 MailCore.framework/Versions/A/Headers/MCNNTPCheckAccountOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCNNTPFetchArticleOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCNNTPFetchArticlesOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCNNTPFetchHeaderOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCNNTPGroupInfo.h create mode 100644 MailCore.framework/Versions/A/Headers/MCNNTPListNewsgroupsOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCNNTPOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCNNTPOperationCallback.h create mode 100644 MailCore.framework/Versions/A/Headers/MCNNTPProgressCallback.h create mode 100644 MailCore.framework/Versions/A/Headers/MCNNTPSession.h create mode 100644 MailCore.framework/Versions/A/Headers/MCNetService.h create mode 100644 MailCore.framework/Versions/A/Headers/MCNull.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOAbstract.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOAbstractMessage.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOAbstractMessagePart.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOAbstractMultipart.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOAbstractPart.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOAddress.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOAttachment.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOConstants.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOHTMLRendererDelegate.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOHTMLRendererIMAPDelegate.h create mode 100755 MailCore.framework/Versions/A/Headers/MCOIMAP.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPAppendMessageOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPBaseOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPCapabilityOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPCopyMessagesOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPFetchContentOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPFetchFoldersOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPFetchMessagesOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPFetchNamespaceOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPFolder.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPFolderInfo.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPFolderInfoOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPFolderStatus.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPFolderStatusOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPIdentity.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPIdentityOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPIdleOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPMessage.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPMessagePart.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPMessageRenderingOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPMultipart.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPNamespace.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPNamespaceItem.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPPart.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPQuotaOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPSearchExpression.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIMAPSearchOperation.h create mode 100755 MailCore.framework/Versions/A/Headers/MCOIMAPSession.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOIndexSet.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOMailProvider.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOMailProvidersManager.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOMessageBuilder.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOMessageHeader.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOMessageParser.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOMessagePart.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOMultipart.h create mode 100644 MailCore.framework/Versions/A/Headers/MCONNTP.h create mode 100644 MailCore.framework/Versions/A/Headers/MCONNTPDisconnectOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCONNTPFetchArticleOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCONNTPFetchArticlesOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCONNTPFetchHeaderOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCONNTPGroupInfo.h create mode 100644 MailCore.framework/Versions/A/Headers/MCONNTPListNewsgroupsOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCONNTPOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCONNTPSession.h create mode 100644 MailCore.framework/Versions/A/Headers/MCONetService.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOObjectWrapper.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOPOP.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOPOPFetchHeaderOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOPOPFetchMessageOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOPOPFetchMessagesOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOPOPMessageInfo.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOPOPNoopOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOPOPOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOPOPSession.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOProvider.h create mode 100644 MailCore.framework/Versions/A/Headers/MCORFC822.h create mode 100644 MailCore.framework/Versions/A/Headers/MCORange.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOSMTP.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOSMTPOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOSMTPSendOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOSMTPSession.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOUtils.h create mode 100644 MailCore.framework/Versions/A/Headers/MCObjC.h create mode 100644 MailCore.framework/Versions/A/Headers/MCObject.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOperationCallback.h create mode 100644 MailCore.framework/Versions/A/Headers/MCOperationQueue.h create mode 100644 MailCore.framework/Versions/A/Headers/MCPOP.h create mode 100644 MailCore.framework/Versions/A/Headers/MCPOPAsyncSession.h create mode 100644 MailCore.framework/Versions/A/Headers/MCPOPFetchHeaderOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCPOPFetchMessageOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCPOPFetchMessagesOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCPOPMessageInfo.h create mode 100644 MailCore.framework/Versions/A/Headers/MCPOPNoopOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCPOPOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCPOPOperationCallback.h create mode 100644 MailCore.framework/Versions/A/Headers/MCPOPProgressCallback.h create mode 100644 MailCore.framework/Versions/A/Headers/MCPOPSession.h create mode 100644 MailCore.framework/Versions/A/Headers/MCProvider.h create mode 100644 MailCore.framework/Versions/A/Headers/MCRFC822.h create mode 100644 MailCore.framework/Versions/A/Headers/MCRange.h create mode 100644 MailCore.framework/Versions/A/Headers/MCRenderer.h create mode 100644 MailCore.framework/Versions/A/Headers/MCSMTP.h create mode 100644 MailCore.framework/Versions/A/Headers/MCSMTPAsyncSession.h create mode 100644 MailCore.framework/Versions/A/Headers/MCSMTPNoopOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCSMTPOperation.h create mode 100644 MailCore.framework/Versions/A/Headers/MCSMTPOperationCallback.h create mode 100644 MailCore.framework/Versions/A/Headers/MCSMTPProgressCallback.h create mode 100644 MailCore.framework/Versions/A/Headers/MCSMTPSession.h create mode 100644 MailCore.framework/Versions/A/Headers/MCSet.h create mode 100644 MailCore.framework/Versions/A/Headers/MCSizeFormatter.h create mode 100644 MailCore.framework/Versions/A/Headers/MCString.h create mode 100644 MailCore.framework/Versions/A/Headers/MCUtils.h create mode 100644 MailCore.framework/Versions/A/Headers/MCValue.h create mode 100644 MailCore.framework/Versions/A/Headers/MailCore.h create mode 100644 MailCore.framework/Versions/A/Headers/NSArray+MCO.h create mode 100644 MailCore.framework/Versions/A/Headers/NSData+MCO.h create mode 100644 MailCore.framework/Versions/A/Headers/NSDictionary+MCO.h create mode 100644 MailCore.framework/Versions/A/Headers/NSError+MCO.h create mode 100644 MailCore.framework/Versions/A/Headers/NSIndexSet+MCO.h create mode 100644 MailCore.framework/Versions/A/Headers/NSObject+MCO.h create mode 100644 MailCore.framework/Versions/A/Headers/NSString+MCO.h create mode 100644 MailCore.framework/Versions/A/Headers/NSValue+MCO.h create mode 100755 MailCore.framework/Versions/A/MailCore create mode 100644 MailCore.framework/Versions/A/Resources/Info.plist create mode 100644 MailCore.framework/Versions/A/Resources/providers.json create mode 120000 MailCore.framework/Versions/Current create mode 160000 MailCore2 create mode 120000 build create mode 100644 com.mrgeckosmedia.EmailScheduler.plist create mode 100644 readme.md diff --git a/EmailScheduler.xcodeproj/project.pbxproj b/EmailScheduler.xcodeproj/project.pbxproj new file mode 100644 index 0000000..2e6e43a --- /dev/null +++ b/EmailScheduler.xcodeproj/project.pbxproj @@ -0,0 +1,431 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXAggregateTarget section */ + 2A452C8119C476C30095EEF6 /* Build Directory */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 2A452C8219C476C30095EEF6 /* Build configuration list for PBXAggregateTarget "Build Directory" */; + buildPhases = ( + 2A452C8519C476C60095EEF6 /* ShellScript */, + ); + dependencies = ( + ); + name = "Build Directory"; + productName = "Build Directory"; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 2A452C7019C475790095EEF6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A452C6F19C475790095EEF6 /* Foundation.framework */; }; + 2A452C7319C475790095EEF6 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A452C7219C475790095EEF6 /* main.m */; }; + 2A452C7719C475790095EEF6 /* EmailScheduler.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = 2A452C7619C475790095EEF6 /* EmailScheduler.1 */; }; + 2A452C7E19C476900095EEF6 /* MailCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A452C7D19C476900095EEF6 /* MailCore.framework */; }; + 2A452C8019C476A40095EEF6 /* MailCore.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 2A452C7D19C476900095EEF6 /* MailCore.framework */; }; + 2A452C8A19C4776A0095EEF6 /* MGMController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A452C8919C4776A0095EEF6 /* MGMController.m */; }; + 2A452C9719C479030095EEF6 /* MGMHTTPAddons.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A452C8D19C479030095EEF6 /* MGMHTTPAddons.m */; }; + 2A452C9819C479030095EEF6 /* MGMHTTPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A452C8F19C479030095EEF6 /* MGMHTTPClient.m */; }; + 2A452C9A19C479030095EEF6 /* MGMHTTPResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A452C9419C479030095EEF6 /* MGMHTTPResponse.m */; }; + 2A452C9B19C479030095EEF6 /* MGMHTTPServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A452C9619C479030095EEF6 /* MGMHTTPServer.m */; }; + 2A452C9E19C47A160095EEF6 /* AsyncSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A452C9D19C47A160095EEF6 /* AsyncSocket.m */; }; + 2A452CA119C47B7D0095EEF6 /* MGMHTTPClientClass.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A452CA019C47B7D0095EEF6 /* MGMHTTPClientClass.m */; }; + 2A452CA519C481C70095EEF6 /* MGMJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A452CA419C481C70095EEF6 /* MGMJSON.m */; }; + 2A452CA819C4850A0095EEF6 /* MGMEmail.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A452CA719C4850A0095EEF6 /* MGMEmail.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 2A452C8619C476D70095EEF6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 2A452C6419C475790095EEF6 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2A452C8119C476C30095EEF6; + remoteInfo = "Build Directory"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 2A452C6A19C475790095EEF6 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + 2A452C7719C475790095EEF6 /* EmailScheduler.1 in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 1; + }; + 2A452C7F19C4769D0095EEF6 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 2A452C8019C476A40095EEF6 /* MailCore.framework in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 2A452C6C19C475790095EEF6 /* EmailScheduler */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = EmailScheduler; sourceTree = BUILT_PRODUCTS_DIR; }; + 2A452C6F19C475790095EEF6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 2A452C7219C475790095EEF6 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 2A452C7519C475790095EEF6 /* EmailScheduler-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "EmailScheduler-Prefix.pch"; sourceTree = ""; }; + 2A452C7619C475790095EEF6 /* EmailScheduler.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = EmailScheduler.1; sourceTree = ""; }; + 2A452C7D19C476900095EEF6 /* MailCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = MailCore.framework; sourceTree = ""; }; + 2A452C8819C4776A0095EEF6 /* MGMController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMController.h; sourceTree = ""; }; + 2A452C8919C4776A0095EEF6 /* MGMController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMController.m; sourceTree = ""; }; + 2A452C8C19C479030095EEF6 /* MGMHTTPAddons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMHTTPAddons.h; sourceTree = ""; }; + 2A452C8D19C479030095EEF6 /* MGMHTTPAddons.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMHTTPAddons.m; sourceTree = ""; }; + 2A452C8E19C479030095EEF6 /* MGMHTTPClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMHTTPClient.h; sourceTree = ""; }; + 2A452C8F19C479030095EEF6 /* MGMHTTPClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMHTTPClient.m; sourceTree = ""; }; + 2A452C9219C479030095EEF6 /* MGMHTTPDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMHTTPDefines.h; sourceTree = ""; }; + 2A452C9319C479030095EEF6 /* MGMHTTPResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMHTTPResponse.h; sourceTree = ""; }; + 2A452C9419C479030095EEF6 /* MGMHTTPResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMHTTPResponse.m; sourceTree = ""; }; + 2A452C9519C479030095EEF6 /* MGMHTTPServer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMHTTPServer.h; sourceTree = ""; }; + 2A452C9619C479030095EEF6 /* MGMHTTPServer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMHTTPServer.m; sourceTree = ""; }; + 2A452C9C19C47A160095EEF6 /* AsyncSocket.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsyncSocket.h; sourceTree = ""; }; + 2A452C9D19C47A160095EEF6 /* AsyncSocket.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AsyncSocket.m; sourceTree = ""; }; + 2A452C9F19C47B7D0095EEF6 /* MGMHTTPClientClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMHTTPClientClass.h; sourceTree = ""; }; + 2A452CA019C47B7D0095EEF6 /* MGMHTTPClientClass.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMHTTPClientClass.m; sourceTree = ""; }; + 2A452CA319C481C70095EEF6 /* MGMJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMJSON.h; sourceTree = ""; }; + 2A452CA419C481C70095EEF6 /* MGMJSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMJSON.m; sourceTree = ""; }; + 2A452CA619C4850A0095EEF6 /* MGMEmail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMEmail.h; sourceTree = ""; }; + 2A452CA719C4850A0095EEF6 /* MGMEmail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMEmail.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 2A452C6919C475790095EEF6 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2A452C7E19C476900095EEF6 /* MailCore.framework in Frameworks */, + 2A452C7019C475790095EEF6 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 2A452C6319C475790095EEF6 = { + isa = PBXGroup; + children = ( + 2A452C7D19C476900095EEF6 /* MailCore.framework */, + 2A452C7119C475790095EEF6 /* EmailScheduler */, + 2A452C6E19C475790095EEF6 /* Frameworks */, + 2A452C6D19C475790095EEF6 /* Products */, + ); + sourceTree = ""; + }; + 2A452C6D19C475790095EEF6 /* Products */ = { + isa = PBXGroup; + children = ( + 2A452C6C19C475790095EEF6 /* EmailScheduler */, + ); + name = Products; + sourceTree = ""; + }; + 2A452C6E19C475790095EEF6 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 2A452C6F19C475790095EEF6 /* Foundation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 2A452C7119C475790095EEF6 /* EmailScheduler */ = { + isa = PBXGroup; + children = ( + 2A452C7219C475790095EEF6 /* main.m */, + 2A452C7619C475790095EEF6 /* EmailScheduler.1 */, + 2A452C7419C475790095EEF6 /* Supporting Files */, + 2A452CA219C481C70095EEF6 /* JSON */, + 2A452C8B19C479030095EEF6 /* MGMHTTP */, + 2A452C8819C4776A0095EEF6 /* MGMController.h */, + 2A452C8919C4776A0095EEF6 /* MGMController.m */, + 2A452C9F19C47B7D0095EEF6 /* MGMHTTPClientClass.h */, + 2A452CA019C47B7D0095EEF6 /* MGMHTTPClientClass.m */, + 2A452CA619C4850A0095EEF6 /* MGMEmail.h */, + 2A452CA719C4850A0095EEF6 /* MGMEmail.m */, + ); + path = EmailScheduler; + sourceTree = ""; + }; + 2A452C7419C475790095EEF6 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 2A452C7519C475790095EEF6 /* EmailScheduler-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 2A452C8B19C479030095EEF6 /* MGMHTTP */ = { + isa = PBXGroup; + children = ( + 2A452C9C19C47A160095EEF6 /* AsyncSocket.h */, + 2A452C9D19C47A160095EEF6 /* AsyncSocket.m */, + 2A452C8C19C479030095EEF6 /* MGMHTTPAddons.h */, + 2A452C8D19C479030095EEF6 /* MGMHTTPAddons.m */, + 2A452C8E19C479030095EEF6 /* MGMHTTPClient.h */, + 2A452C8F19C479030095EEF6 /* MGMHTTPClient.m */, + 2A452C9219C479030095EEF6 /* MGMHTTPDefines.h */, + 2A452C9319C479030095EEF6 /* MGMHTTPResponse.h */, + 2A452C9419C479030095EEF6 /* MGMHTTPResponse.m */, + 2A452C9519C479030095EEF6 /* MGMHTTPServer.h */, + 2A452C9619C479030095EEF6 /* MGMHTTPServer.m */, + ); + path = MGMHTTP; + sourceTree = ""; + }; + 2A452CA219C481C70095EEF6 /* JSON */ = { + isa = PBXGroup; + children = ( + 2A452CA319C481C70095EEF6 /* MGMJSON.h */, + 2A452CA419C481C70095EEF6 /* MGMJSON.m */, + ); + path = JSON; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 2A452C6B19C475790095EEF6 /* EmailScheduler */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2A452C7A19C475790095EEF6 /* Build configuration list for PBXNativeTarget "EmailScheduler" */; + buildPhases = ( + 2A452C6819C475790095EEF6 /* Sources */, + 2A452C6919C475790095EEF6 /* Frameworks */, + 2A452C6A19C475790095EEF6 /* CopyFiles */, + 2A452C7F19C4769D0095EEF6 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + 2A452C8719C476D70095EEF6 /* PBXTargetDependency */, + ); + name = EmailScheduler; + productName = EmailScheduler; + productReference = 2A452C6C19C475790095EEF6 /* EmailScheduler */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 2A452C6419C475790095EEF6 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0510; + ORGANIZATIONNAME = "Mr. Gecko's Media"; + }; + buildConfigurationList = 2A452C6719C475790095EEF6 /* Build configuration list for PBXProject "EmailScheduler" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 2A452C6319C475790095EEF6; + productRefGroup = 2A452C6D19C475790095EEF6 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 2A452C6B19C475790095EEF6 /* EmailScheduler */, + 2A452C8119C476C30095EEF6 /* Build Directory */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + 2A452C8519C476C60095EEF6 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#!/bin/bash\n#\n# Build Directory\n#\n# Created by Mr. Gecko on 4/21/11.\n# No Copyright Claimed. Public Domain.\n#\n# DISCLAIMER: This script is provided as-is. I am not responsible if this script somehow causes harm to you or your system in any way, I am providing this for free in hope that it will of use to someone. I WILL NOT pay you any amount of money if anything happen to your data or you because of the changes this script makes nor am I obligated to help you fix issues this causes.\n#\n\nif [ \"$SRCROOT/build\" != \"$SYMROOT\" ]; then\n if [ -d \"$SRCROOT/build\" ]; then\n /bin/rm -Rf \"$SRCROOT/build\"\n fi\n /bin/ln -fs \"$SYMROOT\" \"$SRCROOT/build\"\nfi"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 2A452C6819C475790095EEF6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2A452C9A19C479030095EEF6 /* MGMHTTPResponse.m in Sources */, + 2A452C7319C475790095EEF6 /* main.m in Sources */, + 2A452CA819C4850A0095EEF6 /* MGMEmail.m in Sources */, + 2A452C9B19C479030095EEF6 /* MGMHTTPServer.m in Sources */, + 2A452C8A19C4776A0095EEF6 /* MGMController.m in Sources */, + 2A452C9819C479030095EEF6 /* MGMHTTPClient.m in Sources */, + 2A452CA519C481C70095EEF6 /* MGMJSON.m in Sources */, + 2A452CA119C47B7D0095EEF6 /* MGMHTTPClientClass.m in Sources */, + 2A452C9719C479030095EEF6 /* MGMHTTPAddons.m in Sources */, + 2A452C9E19C47A160095EEF6 /* AsyncSocket.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 2A452C8719C476D70095EEF6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 2A452C8119C476C30095EEF6 /* Build Directory */; + targetProxy = 2A452C8619C476D70095EEF6 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 2A452C7819C475790095EEF6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.9; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 2A452C7919C475790095EEF6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.9; + SDKROOT = macosx; + }; + name = Release; + }; + 2A452C7B19C475790095EEF6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "EmailScheduler/EmailScheduler-Prefix.pch"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 2A452C7C19C475790095EEF6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ENABLE_OBJC_ARC = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "EmailScheduler/EmailScheduler-Prefix.pch"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 2A452C8319C476C30095EEF6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 2A452C8419C476C30095EEF6 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2A452C6719C475790095EEF6 /* Build configuration list for PBXProject "EmailScheduler" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2A452C7819C475790095EEF6 /* Debug */, + 2A452C7919C475790095EEF6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2A452C7A19C475790095EEF6 /* Build configuration list for PBXNativeTarget "EmailScheduler" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2A452C7B19C475790095EEF6 /* Debug */, + 2A452C7C19C475790095EEF6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2A452C8219C476C30095EEF6 /* Build configuration list for PBXAggregateTarget "Build Directory" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2A452C8319C476C30095EEF6 /* Debug */, + 2A452C8419C476C30095EEF6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 2A452C6419C475790095EEF6 /* Project object */; +} diff --git a/EmailScheduler.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/EmailScheduler.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..f892f0c --- /dev/null +++ b/EmailScheduler.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/EmailScheduler.xcodeproj/project.xcworkspace/xcuserdata/grmrgecko.xcuserdatad/UserInterfaceState.xcuserstate b/EmailScheduler.xcodeproj/project.xcworkspace/xcuserdata/grmrgecko.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..38b1fb8508019110f1f02606735be65253fa58fe GIT binary patch literal 34042 zcmc(|2VfM%_XoZ+du2BX+yzx;zHce^v6dGqGYn>TM}-ZXZ$ zo2=bQNk<4oV1gtBgpd%qq`0J3MNBt#SxpvmRfMH+im|ENS{-5NYHBmVV_ihIrPGr@ zi&ky%z()u%K@nbrH{nCX5^=;RVl)v?BoK*25|K<45ygazC?QG-IiVnwgo;oTWrT)k zBTU2;Vk*&2bP#63LUa<-h+g7$VkvPSv7C5}c$|2GSVwFk77&|>XNiTx7UBhB2eFfQ zm3WPKn|Pl%NE{-L6DNpIiL=DF#COE^#1F(JL?QtaA`ucJ3em^~xgtO0j{?vL6o`UQ zFbYATC=A7*1eAg@&=@opO+=GW4k|*WNQpE^i}YwRGN4A(ge<5NO+#JCil(DEXf9fS z?m|n@-RK^4FItWsMk~-t^cd6G61}EWUoPx9P1e}jcuo~-dJMO?{ zY{8v)8t%eY+>Lwibli*Q;f44Pd^dgwFT>06V|X>*gg4`7@C$e=-iCMLU3d?E3%`fo z$7k_p_;Y*?e}TWmU*WIudHfCj7XN@R;h*sp{1+)A#Uw@2qzCCqdXa%-G#Nw2l5ylH zGLallP9XEhB2r6MlJ#T*X&@WPCbF3{k}af(Y$v`6MhG3>(j$p2U6)X@e5-b)h5!@}fPjJ6r znP9o#QNc>VlY&)(wSskmO@hsWX9ZgXTLmu)b_jL~UKQ*Xye@b{@Q&bJ!G6I3!AF8a zf{z8q1g8Y21!o1H3BDA3CHPkGo#3M2N5Rj6Uj)Akt_uDV{4FGf0wE=&g~Noyg`Pq$ zp`XxS7$gi9jueIoqlD4IQNq!}Bw?~JU6>&pBOEI%5*7<(!V+PHuu@nhY!(`YEy7k| zo6sbjBAhOqA)F~(D7;;`NVr(|pztB#GT~}rpKy(Ei|{$&^TJn!yM=p%`-J<22ZSet zCxxekr-kQ*-w3}Iekc4*ct!ZTNGKAC#3D-ME%Fihio!(Uq6krvC|Q&unjo4enk32* zDMU(nSV6V;1MqA8-Oq8Xx@qF&MMqD7*`qB}$niI$0$i~2-sL~BLQiJlj|AlfS0 zBibu^P4v3xpy&h9hoaM>Pef-#--^ByeJ}b!^tO z;%ITII8B@`&JgE{^The$0&$sGBi4%b;>luzxI=6fTg08>IpVqEdE&doOT>4JSBM`G zKPp}+-XPv6-Xz{8eo4Gt{D$~V@mu1L#D~O(#h;4Lia!(oAif~JDE>oyP5dWCQ!bP% z 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 literal 0 HcmV?d00001 diff --git a/EmailScheduler.xcodeproj/xcuserdata/grmrgecko.xcuserdatad/xcschemes/Build Directory.xcscheme b/EmailScheduler.xcodeproj/xcuserdata/grmrgecko.xcuserdatad/xcschemes/Build Directory.xcscheme new file mode 100644 index 0000000..c98757a --- /dev/null +++ b/EmailScheduler.xcodeproj/xcuserdata/grmrgecko.xcuserdatad/xcschemes/Build Directory.xcscheme @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EmailScheduler.xcodeproj/xcuserdata/grmrgecko.xcuserdatad/xcschemes/EmailScheduler.xcscheme b/EmailScheduler.xcodeproj/xcuserdata/grmrgecko.xcuserdatad/xcschemes/EmailScheduler.xcscheme new file mode 100644 index 0000000..f211b2d --- /dev/null +++ b/EmailScheduler.xcodeproj/xcuserdata/grmrgecko.xcuserdatad/xcschemes/EmailScheduler.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EmailScheduler.xcodeproj/xcuserdata/grmrgecko.xcuserdatad/xcschemes/xcschememanagement.plist b/EmailScheduler.xcodeproj/xcuserdata/grmrgecko.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..42b3b8b --- /dev/null +++ b/EmailScheduler.xcodeproj/xcuserdata/grmrgecko.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,32 @@ + + + + + SchemeUserState + + Build Directory.xcscheme + + orderHint + 1 + + EmailScheduler.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 2A452C6B19C475790095EEF6 + + primary + + + 2A452C8119C476C30095EEF6 + + primary + + + + + diff --git a/EmailScheduler/EmailScheduler-Prefix.pch b/EmailScheduler/EmailScheduler-Prefix.pch new file mode 100644 index 0000000..37fdbe6 --- /dev/null +++ b/EmailScheduler/EmailScheduler-Prefix.pch @@ -0,0 +1,9 @@ +// +// Prefix header +// +// The contents of this file are implicitly included at the beginning of every source file. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/EmailScheduler/EmailScheduler.1 b/EmailScheduler/EmailScheduler.1 new file mode 100644 index 0000000..257ed31 --- /dev/null +++ b/EmailScheduler/EmailScheduler.1 @@ -0,0 +1,79 @@ +.\"Modified from man(1) of FreeBSD, the NetBSD mdoc.template, and mdoc.samples. +.\"See Also: +.\"man mdoc.samples for a complete listing of options +.\"man mdoc for the short list of editing options +.\"/usr/share/misc/mdoc.template +.Dd 9/13/14 \" DATE +.Dt EmailScheduler 1 \" Program name and manual section number +.Os Darwin +.Sh NAME \" Section Header - required - don't modify +.Nm EmailScheduler, +.\" The following lines are read in generating the apropos(man -k) database. Use only key +.\" words here as the database is built based on the words here and in the .ND line. +.Nm Other_name_for_same_program(), +.Nm Yet another name for the same program. +.\" Use .Nm macro to designate other names for the documented program. +.Nd This line parsed for whatis database. +.Sh SYNOPSIS \" Section Header - required - don't modify +.Nm +.Op Fl abcd \" [-abcd] +.Op Fl a Ar path \" [-a path] +.Op Ar file \" [file] +.Op Ar \" [file ...] +.Ar arg0 \" Underlined argument - use .Ar anywhere to underline +arg2 ... \" Arguments +.Sh DESCRIPTION \" Section Header - required - don't modify +Use the .Nm macro to refer to your program throughout the man page like such: +.Nm +Underlining is accomplished with the .Ar macro like this: +.Ar underlined text . +.Pp \" Inserts a space +A list of items with descriptions: +.Bl -tag -width -indent \" Begins a tagged list +.It item a \" Each item preceded by .It macro +Description of item a +.It item b +Description of item b +.El \" Ends the list +.Pp +A list of flags and their descriptions: +.Bl -tag -width -indent \" Differs from above in tag removed +.It Fl a \"-a flag as a list item +Description of -a flag +.It Fl b +Description of -b flag +.El \" Ends the list +.Pp +.\" .Sh ENVIRONMENT \" May not be needed +.\" .Bl -tag -width "ENV_VAR_1" -indent \" ENV_VAR_1 is width of the string ENV_VAR_1 +.\" .It Ev ENV_VAR_1 +.\" Description of ENV_VAR_1 +.\" .It Ev ENV_VAR_2 +.\" Description of ENV_VAR_2 +.\" .El +.Sh FILES \" File used or created by the topic of the man page +.Bl -tag -width "/Users/joeuser/Library/really_long_file_name" -compact +.It Pa /usr/share/file_name +FILE_1 description +.It Pa /Users/joeuser/Library/really_long_file_name +FILE_2 description +.El \" Ends the list +.\" .Sh DIAGNOSTICS \" May not be needed +.\" .Bl -diag +.\" .It Diagnostic Tag +.\" Diagnostic informtion here. +.\" .It Diagnostic Tag +.\" Diagnostic informtion here. +.\" .El +.Sh SEE ALSO +.\" List links in ascending order by section, alphabetically within a section. +.\" Please do not reference files that do not exist without filing a bug report +.Xr a 1 , +.Xr b 1 , +.Xr c 1 , +.Xr a 2 , +.Xr b 2 , +.Xr a 3 , +.Xr b 3 +.\" .Sh BUGS \" Document known, unremedied bugs +.\" .Sh HISTORY \" Document history if command behaves in a unique manner \ No newline at end of file diff --git a/EmailScheduler/JSON/MGMJSON.h b/EmailScheduler/JSON/MGMJSON.h new file mode 100644 index 0000000..579603c --- /dev/null +++ b/EmailScheduler/JSON/MGMJSON.h @@ -0,0 +1,76 @@ +// +// MGMJSON.h +// MGMUsers +// +// Created by Mr. Gecko on 7/31/10. +// Copyright (c) 2014 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import + +@interface NSString (MGMJSON) +- (id)parseJSON; +- (NSString *)JSONValue; +@end +@interface NSData (MGMJSON) +- (id)parseJSON; +@end +@interface NSNumber (MGMJSON) +- (NSString *)JSONValue; +@end +@interface NSNull (MGMJSON) +- (NSString *)JSONValue; +@end +@interface NSDictionary (MGMJSON) +- (NSString *)JSONValue; +@end +@interface NSArray (MGMJSON) +- (NSString *)JSONValue; +@end + +@interface MGMJSON : NSObject { +@private + NSMutableCharacterSet *escapeSet; + NSString *JSONString; + unsigned long position; + unsigned long length; +} +- (id)initWithString:(NSString *)theString; +- (id)parse; +- (void)skipWhitespace; +- (void)skipDigits; +- (id)parseForObject; +- (NSDictionary *)parseForDictionary; +- (NSArray *)parseForArray; +- (NSString *)parseForString; +- (unichar)parseForUnicodeChar; +- (NSNumber *)parseForYES; +- (id)parseForNONULL; +- (NSNumber *)parseForNumber; + +- (NSString *)convert:(id)theObject; +- (NSString *)writeString:(NSString *)theString; +- (NSString *)writeNumber:(NSNumber *)theNumber; +- (NSString *)writeBool:(NSNumber *)theNumber; +- (NSString *)writeNull:(NSNull *)theNull; +- (NSString *)writeDictionary:(NSDictionary *)theDictionary; +- (NSString *)writeArray:(NSArray *)theArray; +@end \ No newline at end of file diff --git a/EmailScheduler/JSON/MGMJSON.m b/EmailScheduler/JSON/MGMJSON.m new file mode 100644 index 0000000..f836ac2 --- /dev/null +++ b/EmailScheduler/JSON/MGMJSON.m @@ -0,0 +1,542 @@ +// +// MGMJSON.m +// MGMUsers +// +// Created by Mr. Gecko on 7/31/10. +// Copyright (c) 2014 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import "MGMJSON.h" + +@implementation NSString (MGMJSON) +- (id)parseJSON { + MGMJSON *parser = [[MGMJSON alloc] initWithString:self]; + id object = [parser parse]; + [parser release]; + return object; +} +- (NSString *)JSONValue { + MGMJSON *writer = [[MGMJSON alloc] init]; + NSString *value = [writer convert:self]; + [writer release]; + return value; +} +@end +@implementation NSData (MGMJSON) +- (id)parseJSON { + NSString *string = [[NSString alloc] initWithData:self encoding:NSUTF8StringEncoding]; + MGMJSON *parser = [[MGMJSON alloc] initWithString:string]; + [string release]; + id object = [parser parse]; + [parser release]; + return object; +} +@end +@implementation NSNumber (MGMJSON) +- (NSString *)JSONValue { + MGMJSON *writer = [[MGMJSON alloc] init]; + NSString *value = [writer convert:self]; + [writer release]; + return value; +} +@end +@implementation NSNull (MGMJSON) +- (NSString *)JSONValue { + MGMJSON *writer = [[MGMJSON alloc] init]; + NSString *value = [writer convert:self]; + [writer release]; + return value; +} +@end +@implementation NSDictionary (MGMJSON) +- (NSString *)JSONValue { + MGMJSON *writer = [[MGMJSON alloc] init]; + NSString *value = [writer convert:self]; + [writer release]; + return value; +} +@end +@implementation NSArray (MGMJSON) +- (NSString *)JSONValue { + MGMJSON *writer = [[MGMJSON alloc] init]; + NSString *value = [writer convert:self]; + [writer release]; + return value; +} +@end + + +@implementation MGMJSON +- (id)init { + if ((self = [super init])) { + escapeSet = [[NSMutableCharacterSet characterSetWithRange:NSMakeRange(0,32)] retain]; + [escapeSet addCharactersInString:@"\"\\"]; + } + return self; +} +- (id)initWithString:(NSString *)theString { + if ((self = [super init])) { + JSONString = [theString retain]; + length = [JSONString length]; + } + return self; +} +- (void)dealloc { + [escapeSet release]; + [JSONString release]; + [super dealloc]; +} + +- (id)parse { + position = 0; + if ([JSONString isEqual:@""]) + return nil; + return [self parseForObject]; +} +- (void)skipWhitespace { + NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet]; + while (positionlength) { + NSLog(@"JSON: Unexpected end of input."); + return 0x0; + } + int len = 0; + NSMutableString *hexValue = [NSMutableString string]; + [hexValue appendString:@"0x"]; + while (position + +@class MGMHTTPServer, MGMEmail; + +@interface MGMController : NSObject { + MGMHTTPServer *server; + NSDictionary *emailAddresses; + NSMutableArray *queue; + BOOL sendingEmail; +} ++ (id)sharedController; +- (NSDictionary *)emailAddresses; +- (void)addToQueue:(MGMEmail *)email; +@end diff --git a/EmailScheduler/MGMController.m b/EmailScheduler/MGMController.m new file mode 100644 index 0000000..9334573 --- /dev/null +++ b/EmailScheduler/MGMController.m @@ -0,0 +1,137 @@ +// +// MGMController.m +// EmailScheduler +// +// Created by James Coleman on 9/13/14. +// Copyright (c) 2014 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import "MGMController.h" +#import "MGMHTTP/MGMHTTPServer.h" +#import "MGMHTTP/MGMHTTPClient.h" +#import "MGMHTTP/MGMHTTPResponse.h" +#import "MGMHTTPClientClass.h" +#import "MGMEmail.h" +#import + +static MGMController *controller; + +@implementation MGMController +- (id)init { + if ((self = [super init])) { + controller = self; + server = [[MGMHTTPServer serverWithPort:28001 delegate:self] retain]; + [server setHTTPClientClass:[MGMHTTPClientClass class]]; + NSError *error = nil; + if (![server start:&error]) { + NSLog(@"Error: %@", error); + } + emailAddresses = [[NSDictionary dictionaryWithObjectsAndKeys:nil] retain]; + + queue = [NSMutableArray new]; + sendingEmail = NO; + } + return self; +} ++ (id)sharedController { + return controller; +} +- (NSDictionary *)emailAddresses { + return emailAddresses; +} +- (void)addToQueue:(MGMEmail *)email { + @synchronized(queue) { + [queue addObject:email]; + if (!sendingEmail) { + sendingEmail = YES; + [NSThread detachNewThreadSelector:@selector(sendNextEmail) toTarget:self withObject:nil]; + } + } +} +- (void)sendNextEmail { + NSAutoreleasePool *pool = [NSAutoreleasePool new]; + MGMEmail *email = nil; + @synchronized(queue) { + email = [queue objectAtIndex:0]; + } + + MCOSMTPSession *smtpSession = [email session]; + MCOSMTPSendOperation *sendOperation = [smtpSession sendOperationWithData:[email rfc822Data]]; + [sendOperation start:^(NSError *error) { + if(error) { + NSLog(@"Error sending email: %@", error); + } else { + NSLog(@"Successfully sent email!"); + } + }]; + + if ([[email eamilAddress] isEqual:@"password@birdim.com"]) {//Email address to automatically delete email for. Make sure gmail has a filter to move sent email to trash. + MCOIMAPSession *session = [email imapSession]; + + MCOIndexSet *uidSet = [MCOIndexSet indexSetWithRange:MCORangeMake(1,UINT64_MAX)]; + MCOIMAPFetchMessagesOperation *fetchOp = [session fetchMessagesByUIDOperationWithFolder:@"[Gmail]/Trash" + requestKind:MCOIMAPMessagesRequestKindHeaders + uids:uidSet]; + + [fetchOp start:^(NSError *err, NSArray *msgs, MCOIndexSet *vanished) { + for (MCOIMAPMessage *message in msgs) { + MCOMessageFlag flags = MCOMessageFlagDeleted; + BOOL deleted = flags & MCOMessageFlagDeleted; + + MCOIMAPOperation *op = [session storeFlagsOperationWithFolder:@"[Gmail]/Trash" + uids:[MCOIndexSet indexSetWithIndex:[message gmailThreadID]] + kind:MCOIMAPStoreFlagsRequestKindSet + flags:flags]; + [op start:^(NSError * error) { + if(!error) { + NSLog(@"Updated flags!"); + } else { + NSLog(@"Error updating flags: %@", error); + } + + if(deleted) { + MCOIMAPOperation *deleteOp = [session expungeOperation:@"[Gmail]/Trash"]; + [deleteOp start:^(NSError *error) { + if(error) { + NSLog(@"Error expunging folder: %@", error); + } else { + NSLog(@"Successfully expunged folder"); + } + }]; + } + }]; + + } + }]; + } + + @synchronized(queue) { + [queue removeObjectAtIndex:0]; + if ([queue count]!=0) { + [NSThread detachNewThreadSelector:@selector(sendNextEmail) toTarget:self withObject:nil]; + } else { + sendingEmail = NO; + } + } + + [pool drain]; +} +@end diff --git a/EmailScheduler/MGMEmail.h b/EmailScheduler/MGMEmail.h new file mode 100644 index 0000000..a811ccd --- /dev/null +++ b/EmailScheduler/MGMEmail.h @@ -0,0 +1,41 @@ +// +// MGMEmail.h +// EmailScheduler +// +// Created by James Coleman on 9/13/14. +// Copyright (c) 2014 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import + +@class MCOSMTPSession, MCOIMAPSession; + +@interface MGMEmail : NSObject { + NSString *emailAddress; + NSData *rfc822Data; +} +- (void)setEmailAddress:(NSString *)email; +- (NSString *)eamilAddress; +- (MCOSMTPSession *)session; +- (MCOIMAPSession *)imapSession; +- (void)setRFC822Data:(NSData *)data; +- (NSData *)rfc822Data; +@end diff --git a/EmailScheduler/MGMEmail.m b/EmailScheduler/MGMEmail.m new file mode 100644 index 0000000..2e776a1 --- /dev/null +++ b/EmailScheduler/MGMEmail.m @@ -0,0 +1,68 @@ +// +// MGMEmail.m +// EmailScheduler +// +// Created by James Coleman on 9/13/14. +// Copyright (c) 2014 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import "MGMEmail.h" +#import "MGMController.h" +#import + +@implementation MGMEmail +- (void)setEmailAddress:(NSString *)email { + [emailAddress autorelease]; + emailAddress = [email retain]; +} +- (NSString *)eamilAddress { + return emailAddress; +} +- (MCOSMTPSession *)session { + MGMController *controller = [MGMController sharedController]; + MCOSMTPSession *smtpSession = [[[MCOSMTPSession alloc] init] autorelease]; + smtpSession.hostname = @"smtp.gmail.com"; + smtpSession.port = 465; + smtpSession.username = emailAddress; + smtpSession.password = [[controller emailAddresses] objectForKey:emailAddress]; + smtpSession.authType = MCOAuthTypeSASLPlain; + smtpSession.connectionType = MCOConnectionTypeTLS; + return smtpSession; +} +- (MCOIMAPSession *)imapSession { + MGMController *controller = [MGMController sharedController]; + MCOIMAPSession *session = [[[MCOIMAPSession alloc] init] autorelease]; + session.hostname = @"imap.gmail.com"; + session.port = 993; + session.username = emailAddress; + session.password = [[controller emailAddresses] objectForKey:emailAddress]; + session.connectionType = MCOConnectionTypeTLS; + return session; +} + +- (void)setRFC822Data:(NSData *)data { + [rfc822Data autorelease]; + rfc822Data = [data retain]; +} +- (NSData *)rfc822Data { + return rfc822Data; +} +@end diff --git a/EmailScheduler/MGMHTTP/AsyncSocket.h b/EmailScheduler/MGMHTTP/AsyncSocket.h new file mode 100644 index 0000000..8382cd3 --- /dev/null +++ b/EmailScheduler/MGMHTTP/AsyncSocket.h @@ -0,0 +1,659 @@ +// +// AsyncSocket.h +// +// This class is in the public domain. +// Originally created by Dustin Voss on Wed Jan 29 2003. +// Updated and maintained by Deusty Designs and the Mac development community. +// +// http://code.google.com/p/cocoaasyncsocket/ +// + +#import + +@class AsyncSocket; +@class AsyncReadPacket; +@class AsyncWritePacket; + +extern NSString *const AsyncSocketException; +extern NSString *const AsyncSocketErrorDomain; + +enum AsyncSocketError +{ + AsyncSocketCFSocketError = kCFSocketError, // From CFSocketError enum. + AsyncSocketNoError = 0, // Never used. + AsyncSocketCanceledError, // onSocketWillConnect: returned NO. + AsyncSocketConnectTimeoutError, + AsyncSocketReadMaxedOutError, // Reached set maxLength without completing + AsyncSocketReadTimeoutError, + AsyncSocketWriteTimeoutError +}; +typedef enum AsyncSocketError AsyncSocketError; + +@protocol AsyncSocketDelegate +@optional + +/** + * In the event of an error, the socket is closed. + * You may call "unreadData" during this call-back to get the last bit of data off the socket. + * When connecting, this delegate method may be called + * before"onSocket:didAcceptNewSocket:" or "onSocket:didConnectToHost:". +**/ +- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err; + +/** + * Called when a socket disconnects with or without error. If you want to release a socket after it disconnects, + * do so here. It is not safe to do that during "onSocket:willDisconnectWithError:". + * + * If you call the disconnect method, and the socket wasn't already disconnected, + * this delegate method will be called before the disconnect method returns. +**/ +- (void)onSocketDidDisconnect:(AsyncSocket *)sock; + +/** + * Called when a socket accepts a connection. Another socket is spawned to handle it. The new socket will have + * the same delegate and will call "onSocket:didConnectToHost:port:". +**/ +- (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket; + +/** + * Called when a new socket is spawned to handle a connection. This method should return the run-loop of the + * thread on which the new socket and its delegate should operate. If omitted, [NSRunLoop currentRunLoop] is used. +**/ +- (NSRunLoop *)onSocket:(AsyncSocket *)sock wantsRunLoopForNewSocket:(AsyncSocket *)newSocket; + +/** + * Called when a socket is about to connect. This method should return YES to continue, or NO to abort. + * If aborted, will result in AsyncSocketCanceledError. + * + * If the connectToHost:onPort:error: method was called, the delegate will be able to access and configure the + * CFReadStream and CFWriteStream as desired prior to connection. + * + * If the connectToAddress:error: method was called, the delegate will be able to access and configure the + * CFSocket and CFSocketNativeHandle (BSD socket) as desired prior to connection. You will be able to access and + * configure the CFReadStream and CFWriteStream in the onSocket:didConnectToHost:port: method. +**/ +- (BOOL)onSocketWillConnect:(AsyncSocket *)sock; + +/** + * Called when a socket connects and is ready for reading and writing. + * The host parameter will be an IP address, not a DNS name. +**/ +- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port; + +/** + * Called when a socket has completed reading the requested data into memory. + * Not called if there is an error. +**/ +- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag; + +/** + * Called when a socket has read in data, but has not yet completed the read. + * This would occur if using readToData: or readToLength: methods. + * It may be used to for things such as updating progress bars. +**/ +- (void)onSocket:(AsyncSocket *)sock didReadPartialDataOfLength:(NSUInteger)partialLength tag:(long)tag; + +/** + * Called when a socket has completed writing the requested data. Not called if there is an error. +**/ +- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag; + +/** + * Called when a socket has written some data, but has not yet completed the entire write. + * It may be used to for things such as updating progress bars. +**/ +- (void)onSocket:(AsyncSocket *)sock didWritePartialDataOfLength:(NSUInteger)partialLength tag:(long)tag; + +/** + * Called if a read operation has reached its timeout without completing. + * This method allows you to optionally extend the timeout. + * If you return a positive time interval (> 0) the read's timeout will be extended by the given amount. + * If you don't implement this method, or return a non-positive time interval (<= 0) the read will timeout as usual. + * + * The elapsed parameter is the sum of the original timeout, plus any additions previously added via this method. + * The length parameter is the number of bytes that have been read so far for the read operation. + * + * Note that this method may be called multiple times for a single read if you return positive numbers. +**/ +- (NSTimeInterval)onSocket:(AsyncSocket *)sock + shouldTimeoutReadWithTag:(long)tag + elapsed:(NSTimeInterval)elapsed + bytesDone:(NSUInteger)length; + +/** + * Called if a write operation has reached its timeout without completing. + * This method allows you to optionally extend the timeout. + * If you return a positive time interval (> 0) the write's timeout will be extended by the given amount. + * If you don't implement this method, or return a non-positive time interval (<= 0) the write will timeout as usual. + * + * The elapsed parameter is the sum of the original timeout, plus any additions previously added via this method. + * The length parameter is the number of bytes that have been written so far for the write operation. + * + * Note that this method may be called multiple times for a single write if you return positive numbers. +**/ +- (NSTimeInterval)onSocket:(AsyncSocket *)sock + shouldTimeoutWriteWithTag:(long)tag + elapsed:(NSTimeInterval)elapsed + bytesDone:(NSUInteger)length; + +/** + * Called after the socket has successfully completed SSL/TLS negotiation. + * This method is not called unless you use the provided startTLS method. + * + * If a SSL/TLS negotiation fails (invalid certificate, etc) then the socket will immediately close, + * and the onSocket:willDisconnectWithError: delegate method will be called with the specific SSL error code. +**/ +- (void)onSocketDidSecure:(AsyncSocket *)sock; + +@end + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +@interface AsyncSocket : NSObject +{ + CFSocketNativeHandle theNativeSocket4; + CFSocketNativeHandle theNativeSocket6; + + CFSocketRef theSocket4; // IPv4 accept or connect socket + CFSocketRef theSocket6; // IPv6 accept or connect socket + + CFReadStreamRef theReadStream; + CFWriteStreamRef theWriteStream; + + CFRunLoopSourceRef theSource4; // For theSocket4 + CFRunLoopSourceRef theSource6; // For theSocket6 + CFRunLoopRef theRunLoop; + CFSocketContext theContext; + NSArray *theRunLoopModes; + + NSTimer *theConnectTimer; + + NSMutableArray *theReadQueue; + AsyncReadPacket *theCurrentRead; + NSTimer *theReadTimer; + NSMutableData *partialReadBuffer; + + NSMutableArray *theWriteQueue; + AsyncWritePacket *theCurrentWrite; + NSTimer *theWriteTimer; + + id theDelegate; + UInt16 theFlags; + + long theUserData; +} + +- (id)init; +- (id)initWithDelegate:(id)delegate; +- (id)initWithDelegate:(id)delegate userData:(long)userData; + +/* String representation is long but has no "\n". */ +- (NSString *)description; + +/** + * Use "canSafelySetDelegate" to see if there is any pending business (reads and writes) with the current delegate + * before changing it. It is, of course, safe to change the delegate before connecting or accepting connections. +**/ +- (id)delegate; +- (BOOL)canSafelySetDelegate; +- (void)setDelegate:(id)delegate; + +/* User data can be a long, or an id or void * cast to a long. */ +- (long)userData; +- (void)setUserData:(long)userData; + +/* Don't use these to read or write. And don't close them either! */ +- (CFSocketRef)getCFSocket; +- (CFReadStreamRef)getCFReadStream; +- (CFWriteStreamRef)getCFWriteStream; + +// Once one of the accept or connect methods are called, the AsyncSocket instance is locked in +// and the other accept/connect methods can't be called without disconnecting the socket first. +// If the attempt fails or times out, these methods either return NO or +// call "onSocket:willDisconnectWithError:" and "onSockedDidDisconnect:". + +// When an incoming connection is accepted, AsyncSocket invokes several delegate methods. +// These methods are (in chronological order): +// 1. onSocket:didAcceptNewSocket: +// 2. onSocket:wantsRunLoopForNewSocket: +// 3. onSocketWillConnect: +// +// Your server code will need to retain the accepted socket (if you want to accept it). +// The best place to do this is probably in the onSocket:didAcceptNewSocket: method. +// +// After the read and write streams have been setup for the newly accepted socket, +// the onSocket:didConnectToHost:port: method will be called on the proper run loop. +// +// Multithreading Note: If you're going to be moving the newly accepted socket to another run +// loop by implementing onSocket:wantsRunLoopForNewSocket:, then you should wait until the +// onSocket:didConnectToHost:port: method before calling read, write, or startTLS methods. +// Otherwise read/write events are scheduled on the incorrect runloop, and chaos may ensue. + +/** + * Tells the socket to begin listening and accepting connections on the given port. + * When a connection comes in, the AsyncSocket instance will call the various delegate methods (see above). + * The socket will listen on all available interfaces (e.g. wifi, ethernet, etc) +**/ +- (BOOL)acceptOnPort:(UInt16)port error:(NSError **)errPtr; + +/** + * This method is the same as acceptOnPort:error: with the additional option + * of specifying which interface to listen on. So, for example, if you were writing code for a server that + * has multiple IP addresses, you could specify which address you wanted to listen on. Or you could use it + * to specify that the socket should only accept connections over ethernet, and not other interfaces such as wifi. + * You may also use the special strings "localhost" or "loopback" to specify that + * the socket only accept connections from the local machine. + * + * To accept connections on any interface pass nil, or simply use the acceptOnPort:error: method. +**/ +- (BOOL)acceptOnInterface:(NSString *)interface port:(UInt16)port error:(NSError **)errPtr; + +/** + * Connects to the given host and port. + * The host may be a domain name (e.g. "deusty.com") or an IP address string (e.g. "192.168.0.2") +**/ +- (BOOL)connectToHost:(NSString *)hostname onPort:(UInt16)port error:(NSError **)errPtr; + +/** + * This method is the same as connectToHost:onPort:error: with an additional timeout option. + * To not time out use a negative time interval, or simply use the connectToHost:onPort:error: method. +**/ +- (BOOL)connectToHost:(NSString *)hostname + onPort:(UInt16)port + withTimeout:(NSTimeInterval)timeout + error:(NSError **)errPtr; + +/** + * Connects to the given address, specified as a sockaddr structure wrapped in a NSData object. + * For example, a NSData object returned from NSNetservice's addresses method. + * + * If you have an existing struct sockaddr you can convert it to a NSData object like so: + * struct sockaddr sa -> NSData *dsa = [NSData dataWithBytes:&remoteAddr length:remoteAddr.sa_len]; + * struct sockaddr *sa -> NSData *dsa = [NSData dataWithBytes:remoteAddr length:remoteAddr->sa_len]; +**/ +- (BOOL)connectToAddress:(NSData *)remoteAddr error:(NSError **)errPtr; + +/** + * This method is the same as connectToAddress:error: with an additional timeout option. + * To not time out use a negative time interval, or simply use the connectToAddress:error: method. +**/ +- (BOOL)connectToAddress:(NSData *)remoteAddr withTimeout:(NSTimeInterval)timeout error:(NSError **)errPtr; + +- (BOOL)connectToAddress:(NSData *)remoteAddr + viaInterfaceAddress:(NSData *)interfaceAddr + withTimeout:(NSTimeInterval)timeout + error:(NSError **)errPtr; + +/** + * Disconnects immediately. Any pending reads or writes are dropped. + * If the socket is not already disconnected, the onSocketDidDisconnect delegate method + * will be called immediately, before this method returns. + * + * Please note the recommended way of releasing an AsyncSocket instance (e.g. in a dealloc method) + * [asyncSocket setDelegate:nil]; + * [asyncSocket disconnect]; + * [asyncSocket release]; +**/ +- (void)disconnect; + +/** + * Disconnects after all pending reads have completed. + * After calling this, the read and write methods will do nothing. + * The socket will disconnect even if there are still pending writes. +**/ +- (void)disconnectAfterReading; + +/** + * Disconnects after all pending writes have completed. + * After calling this, the read and write methods will do nothing. + * The socket will disconnect even if there are still pending reads. +**/ +- (void)disconnectAfterWriting; + +/** + * Disconnects after all pending reads and writes have completed. + * After calling this, the read and write methods will do nothing. +**/ +- (void)disconnectAfterReadingAndWriting; + +/* Returns YES if the socket and streams are open, connected, and ready for reading and writing. */ +- (BOOL)isConnected; + +/** + * Returns the local or remote host and port to which this socket is connected, or nil and 0 if not connected. + * The host will be an IP address. +**/ +- (NSString *)connectedHost; +- (UInt16)connectedPort; + +- (NSString *)localHost; +- (UInt16)localPort; + +/** + * Returns the local or remote address to which this socket is connected, + * specified as a sockaddr structure wrapped in a NSData object. + * + * See also the connectedHost, connectedPort, localHost and localPort methods. +**/ +- (NSData *)connectedAddress; +- (NSData *)localAddress; + +/** + * Returns whether the socket is IPv4 or IPv6. + * An accepting socket may be both. +**/ +- (BOOL)isIPv4; +- (BOOL)isIPv6; + +// The readData and writeData methods won't block (they are asynchronous). +// +// When a read is complete the onSocket:didReadData:withTag: delegate method is called. +// When a write is complete the onSocket:didWriteDataWithTag: delegate method is called. +// +// You may optionally set a timeout for any read/write operation. (To not timeout, use a negative time interval.) +// If a read/write opertion times out, the corresponding "onSocket:shouldTimeout..." delegate method +// is called to optionally allow you to extend the timeout. +// Upon a timeout, the "onSocket:willDisconnectWithError:" method is called, followed by "onSocketDidDisconnect". +// +// The tag is for your convenience. +// You can use it as an array index, step number, state id, pointer, etc. + +/** + * Reads the first available bytes that become available on the socket. + * + * If the timeout value is negative, the read operation will not use a timeout. +**/ +- (void)readDataWithTimeout:(NSTimeInterval)timeout tag:(long)tag; + +/** + * Reads the first available bytes that become available on the socket. + * The bytes will be appended to the given byte buffer starting at the given offset. + * The given buffer will automatically be increased in size if needed. + * + * If the timeout value is negative, the read operation will not use a timeout. + * If the buffer if nil, the socket will create a buffer for you. + * + * If the bufferOffset is greater than the length of the given buffer, + * the method will do nothing, and the delegate will not be called. + * + * If you pass a buffer, you must not alter it in any way while AsyncSocket is using it. + * After completion, the data returned in onSocket:didReadData:withTag: will be a subset of the given buffer. + * That is, it will reference the bytes that were appended to the given buffer. +**/ +- (void)readDataWithTimeout:(NSTimeInterval)timeout + buffer:(NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + tag:(long)tag; + +/** + * Reads the first available bytes that become available on the socket. + * The bytes will be appended to the given byte buffer starting at the given offset. + * The given buffer will automatically be increased in size if needed. + * A maximum of length bytes will be read. + * + * If the timeout value is negative, the read operation will not use a timeout. + * If the buffer if nil, a buffer will automatically be created for you. + * If maxLength is zero, no length restriction is enforced. + * + * If the bufferOffset is greater than the length of the given buffer, + * the method will do nothing, and the delegate will not be called. + * + * If you pass a buffer, you must not alter it in any way while AsyncSocket is using it. + * After completion, the data returned in onSocket:didReadData:withTag: will be a subset of the given buffer. + * That is, it will reference the bytes that were appended to the given buffer. +**/ +- (void)readDataWithTimeout:(NSTimeInterval)timeout + buffer:(NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + maxLength:(NSUInteger)length + tag:(long)tag; + +/** + * Reads the given number of bytes. + * + * If the timeout value is negative, the read operation will not use a timeout. + * + * If the length is 0, this method does nothing and the delegate is not called. +**/ +- (void)readDataToLength:(NSUInteger)length withTimeout:(NSTimeInterval)timeout tag:(long)tag; + +/** + * Reads the given number of bytes. + * The bytes will be appended to the given byte buffer starting at the given offset. + * The given buffer will automatically be increased in size if needed. + * + * If the timeout value is negative, the read operation will not use a timeout. + * If the buffer if nil, a buffer will automatically be created for you. + * + * If the length is 0, this method does nothing and the delegate is not called. + * If the bufferOffset is greater than the length of the given buffer, + * the method will do nothing, and the delegate will not be called. + * + * If you pass a buffer, you must not alter it in any way while AsyncSocket is using it. + * After completion, the data returned in onSocket:didReadData:withTag: will be a subset of the given buffer. + * That is, it will reference the bytes that were appended to the given buffer. +**/ +- (void)readDataToLength:(NSUInteger)length + withTimeout:(NSTimeInterval)timeout + buffer:(NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + tag:(long)tag; + +/** + * Reads bytes until (and including) the passed "data" parameter, which acts as a separator. + * + * If the timeout value is negative, the read operation will not use a timeout. + * + * If you pass nil or zero-length data as the "data" parameter, + * the method will do nothing, and the delegate will not be called. + * + * To read a line from the socket, use the line separator (e.g. CRLF for HTTP, see below) as the "data" parameter. + * Note that this method is not character-set aware, so if a separator can occur naturally as part of the encoding for + * a character, the read will prematurely end. +**/ +- (void)readDataToData:(NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag; + +/** + * Reads bytes until (and including) the passed "data" parameter, which acts as a separator. + * The bytes will be appended to the given byte buffer starting at the given offset. + * The given buffer will automatically be increased in size if needed. + * + * If the timeout value is negative, the read operation will not use a timeout. + * If the buffer if nil, a buffer will automatically be created for you. + * + * If the bufferOffset is greater than the length of the given buffer, + * the method will do nothing, and the delegate will not be called. + * + * If you pass a buffer, you must not alter it in any way while AsyncSocket is using it. + * After completion, the data returned in onSocket:didReadData:withTag: will be a subset of the given buffer. + * That is, it will reference the bytes that were appended to the given buffer. + * + * To read a line from the socket, use the line separator (e.g. CRLF for HTTP, see below) as the "data" parameter. + * Note that this method is not character-set aware, so if a separator can occur naturally as part of the encoding for + * a character, the read will prematurely end. +**/ +- (void)readDataToData:(NSData *)data + withTimeout:(NSTimeInterval)timeout + buffer:(NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + tag:(long)tag; + +/** + * Reads bytes until (and including) the passed "data" parameter, which acts as a separator. + * + * If the timeout value is negative, the read operation will not use a timeout. + * + * If maxLength is zero, no length restriction is enforced. + * Otherwise if maxLength bytes are read without completing the read, + * it is treated similarly to a timeout - the socket is closed with a AsyncSocketReadMaxedOutError. + * The read will complete successfully if exactly maxLength bytes are read and the given data is found at the end. + * + * If you pass nil or zero-length data as the "data" parameter, + * the method will do nothing, and the delegate will not be called. + * If you pass a maxLength parameter that is less than the length of the data parameter, + * the method will do nothing, and the delegate will not be called. + * + * To read a line from the socket, use the line separator (e.g. CRLF for HTTP, see below) as the "data" parameter. + * Note that this method is not character-set aware, so if a separator can occur naturally as part of the encoding for + * a character, the read will prematurely end. +**/ +- (void)readDataToData:(NSData *)data withTimeout:(NSTimeInterval)timeout maxLength:(NSUInteger)length tag:(long)tag; + +/** + * Reads bytes until (and including) the passed "data" parameter, which acts as a separator. + * The bytes will be appended to the given byte buffer starting at the given offset. + * The given buffer will automatically be increased in size if needed. + * A maximum of length bytes will be read. + * + * If the timeout value is negative, the read operation will not use a timeout. + * If the buffer if nil, a buffer will automatically be created for you. + * + * If maxLength is zero, no length restriction is enforced. + * Otherwise if maxLength bytes are read without completing the read, + * it is treated similarly to a timeout - the socket is closed with a AsyncSocketReadMaxedOutError. + * The read will complete successfully if exactly maxLength bytes are read and the given data is found at the end. + * + * If you pass a maxLength parameter that is less than the length of the data parameter, + * the method will do nothing, and the delegate will not be called. + * If the bufferOffset is greater than the length of the given buffer, + * the method will do nothing, and the delegate will not be called. + * + * If you pass a buffer, you must not alter it in any way while AsyncSocket is using it. + * After completion, the data returned in onSocket:didReadData:withTag: will be a subset of the given buffer. + * That is, it will reference the bytes that were appended to the given buffer. + * + * To read a line from the socket, use the line separator (e.g. CRLF for HTTP, see below) as the "data" parameter. + * Note that this method is not character-set aware, so if a separator can occur naturally as part of the encoding for + * a character, the read will prematurely end. +**/ +- (void)readDataToData:(NSData *)data + withTimeout:(NSTimeInterval)timeout + buffer:(NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + maxLength:(NSUInteger)length + tag:(long)tag; + +/** + * Writes data to the socket, and calls the delegate when finished. + * + * If you pass in nil or zero-length data, this method does nothing and the delegate will not be called. + * If the timeout value is negative, the write operation will not use a timeout. +**/ +- (void)writeData:(NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag; + +/** + * Returns progress of current read or write, from 0.0 to 1.0, or NaN if no read/write (use isnan() to check). + * "tag", "done" and "total" will be filled in if they aren't NULL. +**/ +- (float)progressOfReadReturningTag:(long *)tag bytesDone:(NSUInteger *)done total:(NSUInteger *)total; +- (float)progressOfWriteReturningTag:(long *)tag bytesDone:(NSUInteger *)done total:(NSUInteger *)total; + +/** + * Secures the connection using SSL/TLS. + * + * This method may be called at any time, and the TLS handshake will occur after all pending reads and writes + * are finished. This allows one the option of sending a protocol dependent StartTLS message, and queuing + * the upgrade to TLS at the same time, without having to wait for the write to finish. + * Any reads or writes scheduled after this method is called will occur over the secured connection. + * + * The possible keys and values for the TLS settings are well documented. + * Some possible keys are: + * - kCFStreamSSLLevel + * - kCFStreamSSLAllowsExpiredCertificates + * - kCFStreamSSLAllowsExpiredRoots + * - kCFStreamSSLAllowsAnyRoot + * - kCFStreamSSLValidatesCertificateChain + * - kCFStreamSSLPeerName + * - kCFStreamSSLCertificates + * - kCFStreamSSLIsServer + * + * Please refer to Apple's documentation for associated values, as well as other possible keys. + * + * If you pass in nil or an empty dictionary, the default settings will be used. + * + * The default settings will check to make sure the remote party's certificate is signed by a + * trusted 3rd party certificate agency (e.g. verisign) and that the certificate is not expired. + * However it will not verify the name on the certificate unless you + * give it a name to verify against via the kCFStreamSSLPeerName key. + * The security implications of this are important to understand. + * Imagine you are attempting to create a secure connection to MySecureServer.com, + * but your socket gets directed to MaliciousServer.com because of a hacked DNS server. + * If you simply use the default settings, and MaliciousServer.com has a valid certificate, + * the default settings will not detect any problems since the certificate is valid. + * To properly secure your connection in this particular scenario you + * should set the kCFStreamSSLPeerName property to "MySecureServer.com". + * If you do not know the peer name of the remote host in advance (for example, you're not sure + * if it will be "domain.com" or "www.domain.com"), then you can use the default settings to validate the + * certificate, and then use the X509Certificate class to verify the issuer after the socket has been secured. + * The X509Certificate class is part of the CocoaAsyncSocket open source project. +**/ +- (void)startTLS:(NSDictionary *)tlsSettings; + +/** + * For handling readDataToData requests, data is necessarily read from the socket in small increments. + * The performance can be much improved by allowing AsyncSocket to read larger chunks at a time and + * store any overflow in a small internal buffer. + * This is termed pre-buffering, as some data may be read for you before you ask for it. + * If you use readDataToData a lot, enabling pre-buffering will result in better performance, especially on the iPhone. + * + * The default pre-buffering state is controlled by the DEFAULT_PREBUFFERING definition. + * It is highly recommended one leave this set to YES. + * + * This method exists in case pre-buffering needs to be disabled by default for some unforeseen reason. + * In that case, this method exists to allow one to easily enable pre-buffering when ready. +**/ +- (void)enablePreBuffering; + +/** + * When you create an AsyncSocket, it is added to the runloop of the current thread. + * So for manually created sockets, it is easiest to simply create the socket on the thread you intend to use it. + * + * If a new socket is accepted, the delegate method onSocket:wantsRunLoopForNewSocket: is called to + * allow you to place the socket on a separate thread. This works best in conjunction with a thread pool design. + * + * If, however, you need to move the socket to a separate thread at a later time, this + * method may be used to accomplish the task. + * + * This method must be called from the thread/runloop the socket is currently running on. + * + * Note: After calling this method, all further method calls to this object should be done from the given runloop. + * Also, all delegate calls will be sent on the given runloop. +**/ +- (BOOL)moveToRunLoop:(NSRunLoop *)runLoop; + +/** + * Allows you to configure which run loop modes the socket uses. + * The default set of run loop modes is NSDefaultRunLoopMode. + * + * If you'd like your socket to continue operation during other modes, you may want to add modes such as + * NSModalPanelRunLoopMode or NSEventTrackingRunLoopMode. Or you may simply want to use NSRunLoopCommonModes. + * + * Accepted sockets will automatically inherit the same run loop modes as the listening socket. + * + * Note: NSRunLoopCommonModes is defined in 10.5. For previous versions one can use kCFRunLoopCommonModes. +**/ +- (BOOL)setRunLoopModes:(NSArray *)runLoopModes; +- (BOOL)addRunLoopMode:(NSString *)runLoopMode; +- (BOOL)removeRunLoopMode:(NSString *)runLoopMode; + +/** + * Returns the current run loop modes the AsyncSocket instance is operating in. + * The default set of run loop modes is NSDefaultRunLoopMode. +**/ +- (NSArray *)runLoopModes; + +/** + * In the event of an error, this method may be called during onSocket:willDisconnectWithError: to read + * any data that's left on the socket. +**/ +- (NSData *)unreadData; + +/* A few common line separators, for use with the readDataToData:... methods. */ ++ (NSData *)CRLFData; // 0x0D0A ++ (NSData *)CRData; // 0x0D ++ (NSData *)LFData; // 0x0A ++ (NSData *)ZeroData; // 0x00 + +@end diff --git a/EmailScheduler/MGMHTTP/AsyncSocket.m b/EmailScheduler/MGMHTTP/AsyncSocket.m new file mode 100644 index 0000000..4325611 --- /dev/null +++ b/EmailScheduler/MGMHTTP/AsyncSocket.m @@ -0,0 +1,4192 @@ +// +// AsyncSocket.m +// +// This class is in the public domain. +// Originally created by Dustin Voss on Wed Jan 29 2003. +// Updated and maintained by Deusty Designs and the Mac development community. +// +// http://code.google.com/p/cocoaasyncsocket/ +// + +#import "AsyncSocket.h" +#import +#import +#import +#import + +#if TARGET_OS_IPHONE +// Note: You may need to add the CFNetwork Framework to your project +#import +#endif + +#pragma mark Declarations + +#define DEFAULT_PREBUFFERING YES // Whether pre-buffering is enabled by default + +#define READQUEUE_CAPACITY 5 // Initial capacity +#define WRITEQUEUE_CAPACITY 5 // Initial capacity +#define READALL_CHUNKSIZE 256 // Incremental increase in buffer size +#define WRITE_CHUNKSIZE (1024 * 4) // Limit on size of each write pass + +NSString *const AsyncSocketException = @"AsyncSocketException"; +NSString *const AsyncSocketErrorDomain = @"AsyncSocketErrorDomain"; + +#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 +// Mutex lock used by all instances of AsyncSocket, to protect getaddrinfo. +// Prior to Mac OS X 10.5 this method was not thread-safe. +static NSString *getaddrinfoLock = @"lock"; +#endif + +enum AsyncSocketFlags +{ + kEnablePreBuffering = 1 << 0, // If set, pre-buffering is enabled + kDidStartDelegate = 1 << 1, // If set, disconnection results in delegate call + kDidCompleteOpenForRead = 1 << 2, // If set, open callback has been called for read stream + kDidCompleteOpenForWrite = 1 << 3, // If set, open callback has been called for write stream + kStartingReadTLS = 1 << 4, // If set, we're waiting for TLS negotiation to complete + kStartingWriteTLS = 1 << 5, // If set, we're waiting for TLS negotiation to complete + kForbidReadsWrites = 1 << 6, // If set, no new reads or writes are allowed + kDisconnectAfterReads = 1 << 7, // If set, disconnect after no more reads are queued + kDisconnectAfterWrites = 1 << 8, // If set, disconnect after no more writes are queued + kClosingWithError = 1 << 9, // If set, the socket is being closed due to an error + kDequeueReadScheduled = 1 << 10, // If set, a maybeDequeueRead operation is already scheduled + kDequeueWriteScheduled = 1 << 11, // If set, a maybeDequeueWrite operation is already scheduled + kSocketCanAcceptBytes = 1 << 12, // If set, we know socket can accept bytes. If unset, it's unknown. + kSocketHasBytesAvailable = 1 << 13, // If set, we know socket has bytes available. If unset, it's unknown. +}; + +@interface AsyncSocket (Private) + +// Connecting +- (void)startConnectTimeout:(NSTimeInterval)timeout; +- (void)endConnectTimeout; + +// Socket Implementation +- (CFSocketRef)newAcceptSocketForAddress:(NSData *)addr error:(NSError **)errPtr; +- (BOOL)createSocketForAddress:(NSData *)remoteAddr error:(NSError **)errPtr; +- (BOOL)bindSocketToAddress:(NSData *)interfaceAddr error:(NSError **)errPtr; +- (BOOL)attachSocketsToRunLoop:(NSRunLoop *)runLoop error:(NSError **)errPtr; +- (BOOL)configureSocketAndReturnError:(NSError **)errPtr; +- (BOOL)connectSocketToAddress:(NSData *)remoteAddr error:(NSError **)errPtr; +- (void)doAcceptWithSocket:(CFSocketNativeHandle)newSocket; +- (void)doSocketOpen:(CFSocketRef)sock withCFSocketError:(CFSocketError)err; + +// Stream Implementation +- (BOOL)createStreamsFromNative:(CFSocketNativeHandle)native error:(NSError **)errPtr; +- (BOOL)createStreamsToHost:(NSString *)hostname onPort:(UInt16)port error:(NSError **)errPtr; +- (BOOL)attachStreamsToRunLoop:(NSRunLoop *)runLoop error:(NSError **)errPtr; +- (BOOL)configureStreamsAndReturnError:(NSError **)errPtr; +- (BOOL)openStreamsAndReturnError:(NSError **)errPtr; +- (void)doStreamOpen; +- (BOOL)setSocketFromStreamsAndReturnError:(NSError **)errPtr; + +// Disconnect Implementation +- (void)closeWithError:(NSError *)err; +- (void)recoverUnreadData; +- (void)emptyQueues; +- (void)close; + +// Errors +- (NSError *)getErrnoError; +- (NSError *)getAbortError; +- (NSError *)getStreamError; +- (NSError *)getSocketError; +- (NSError *)getConnectTimeoutError; +- (NSError *)getReadMaxedOutError; +- (NSError *)getReadTimeoutError; +- (NSError *)getWriteTimeoutError; +- (NSError *)errorFromCFStreamError:(CFStreamError)err; + +// Diagnostics +- (BOOL)isDisconnected; +- (BOOL)areStreamsConnected; +- (NSString *)connectedHostFromNativeSocket4:(CFSocketNativeHandle)theNativeSocket; +- (NSString *)connectedHostFromNativeSocket6:(CFSocketNativeHandle)theNativeSocket; +- (NSString *)connectedHostFromCFSocket4:(CFSocketRef)socket; +- (NSString *)connectedHostFromCFSocket6:(CFSocketRef)socket; +- (UInt16)connectedPortFromNativeSocket4:(CFSocketNativeHandle)theNativeSocket; +- (UInt16)connectedPortFromNativeSocket6:(CFSocketNativeHandle)theNativeSocket; +- (UInt16)connectedPortFromCFSocket4:(CFSocketRef)socket; +- (UInt16)connectedPortFromCFSocket6:(CFSocketRef)socket; +- (NSString *)localHostFromNativeSocket4:(CFSocketNativeHandle)theNativeSocket; +- (NSString *)localHostFromNativeSocket6:(CFSocketNativeHandle)theNativeSocket; +- (NSString *)localHostFromCFSocket4:(CFSocketRef)socket; +- (NSString *)localHostFromCFSocket6:(CFSocketRef)socket; +- (UInt16)localPortFromNativeSocket4:(CFSocketNativeHandle)theNativeSocket; +- (UInt16)localPortFromNativeSocket6:(CFSocketNativeHandle)theNativeSocket; +- (UInt16)localPortFromCFSocket4:(CFSocketRef)socket; +- (UInt16)localPortFromCFSocket6:(CFSocketRef)socket; +- (NSString *)hostFromAddress4:(struct sockaddr_in *)pSockaddr4; +- (NSString *)hostFromAddress6:(struct sockaddr_in6 *)pSockaddr6; +- (UInt16)portFromAddress4:(struct sockaddr_in *)pSockaddr4; +- (UInt16)portFromAddress6:(struct sockaddr_in6 *)pSockaddr6; + +// Reading +- (void)doBytesAvailable; +- (void)completeCurrentRead; +- (void)endCurrentRead; +- (void)scheduleDequeueRead; +- (void)maybeDequeueRead; +- (void)doReadTimeout:(NSTimer *)timer; + +// Writing +- (void)doSendBytes; +- (void)completeCurrentWrite; +- (void)endCurrentWrite; +- (void)scheduleDequeueWrite; +- (void)maybeDequeueWrite; +- (void)maybeScheduleDisconnect; +- (void)doWriteTimeout:(NSTimer *)timer; + +// Run Loop +- (void)runLoopAddSource:(CFRunLoopSourceRef)source; +- (void)runLoopRemoveSource:(CFRunLoopSourceRef)source; +- (void)runLoopAddTimer:(NSTimer *)timer; +- (void)runLoopRemoveTimer:(NSTimer *)timer; +- (void)runLoopUnscheduleReadStream; +- (void)runLoopUnscheduleWriteStream; + +// Security +- (void)maybeStartTLS; +- (void)onTLSHandshakeSuccessful; + +// Callbacks +- (void)doCFCallback:(CFSocketCallBackType)type + forSocket:(CFSocketRef)sock withAddress:(NSData *)address withData:(const void *)pData; +- (void)doCFReadStreamCallback:(CFStreamEventType)type forStream:(CFReadStreamRef)stream; +- (void)doCFWriteStreamCallback:(CFStreamEventType)type forStream:(CFWriteStreamRef)stream; + +@end + +static void MyCFSocketCallback(CFSocketRef, CFSocketCallBackType, CFDataRef, const void *, void *); +static void MyCFReadStreamCallback(CFReadStreamRef stream, CFStreamEventType type, void *pInfo); +static void MyCFWriteStreamCallback(CFWriteStreamRef stream, CFStreamEventType type, void *pInfo); + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * The AsyncReadPacket encompasses the instructions for any given read. + * The content of a read packet allows the code to determine if we're: + * - reading to a certain length + * - reading to a certain separator + * - or simply reading the first chunk of available data +**/ +@interface AsyncReadPacket : NSObject +{ + @public + NSMutableData *buffer; + NSUInteger startOffset; + NSUInteger bytesDone; + NSUInteger maxLength; + NSTimeInterval timeout; + NSUInteger readLength; + NSData *term; + BOOL bufferOwner; + NSUInteger originalBufferLength; + long tag; +} +- (id)initWithData:(NSMutableData *)d + startOffset:(NSUInteger)s + maxLength:(NSUInteger)m + timeout:(NSTimeInterval)t + readLength:(NSUInteger)l + terminator:(NSData *)e + tag:(long)i; + +- (NSUInteger)readLengthForNonTerm; +- (NSUInteger)readLengthForTerm; +- (NSUInteger)readLengthForTermWithPreBuffer:(NSData *)preBuffer found:(BOOL *)foundPtr; + +- (NSUInteger)prebufferReadLengthForTerm; +- (NSInteger)searchForTermAfterPreBuffering:(NSUInteger)numBytes; +@end + +@implementation AsyncReadPacket + +- (id)initWithData:(NSMutableData *)d + startOffset:(NSUInteger)s + maxLength:(NSUInteger)m + timeout:(NSTimeInterval)t + readLength:(NSUInteger)l + terminator:(NSData *)e + tag:(long)i +{ + if((self = [super init])) + { + if (d) + { + buffer = [d retain]; + startOffset = s; + bufferOwner = NO; + originalBufferLength = [d length]; + } + else + { + if (readLength > 0) + buffer = [[NSMutableData alloc] initWithLength:readLength]; + else + buffer = [[NSMutableData alloc] initWithLength:0]; + + startOffset = 0; + bufferOwner = YES; + originalBufferLength = 0; + } + + bytesDone = 0; + maxLength = m; + timeout = t; + readLength = l; + term = [e copy]; + tag = i; + } + return self; +} + +/** + * For read packets without a set terminator, returns the safe length of data that can be read + * without exceeding the maxLength, or forcing a resize of the buffer if at all possible. +**/ +- (NSUInteger)readLengthForNonTerm +{ + NSAssert(term == nil, @"This method does not apply to term reads"); + + if (readLength > 0) + { + // Read a specific length of data + + return readLength - bytesDone; + + // No need to avoid resizing the buffer. + // It should be resized if the buffer space is less than the requested read length. + } + else + { + // Read all available data + + NSUInteger result = READALL_CHUNKSIZE; + + if (maxLength > 0) + { + result = MIN(result, (maxLength - bytesDone)); + } + + if (!bufferOwner) + { + // We did NOT create the buffer. + // It is owned by the caller. + // Avoid resizing the buffer if at all possible. + + if ([buffer length] == originalBufferLength) + { + NSUInteger buffSize = [buffer length]; + NSUInteger buffSpace = buffSize - startOffset - bytesDone; + + if (buffSpace > 0) + { + result = MIN(result, buffSpace); + } + } + } + + return result; + } +} + +/** + * For read packets with a set terminator, returns the safe length of data that can be read + * without going over a terminator, or the maxLength, or forcing a resize of the buffer if at all possible. + * + * It is assumed the terminator has not already been read. +**/ +- (NSUInteger)readLengthForTerm +{ + NSAssert(term != nil, @"This method does not apply to non-term reads"); + + // What we're going to do is look for a partial sequence of the terminator at the end of the buffer. + // If a partial sequence occurs, then we must assume the next bytes to arrive will be the rest of the term, + // and we can only read that amount. + // Otherwise, we're safe to read the entire length of the term. + + NSUInteger termLength = [term length]; + + // Shortcuts + if (bytesDone == 0) return termLength; + if (termLength == 1) return termLength; + + // i = index within buffer at which to check data + // j = length of term to check against + + NSUInteger i, j; + if (bytesDone >= termLength) + { + i = bytesDone - termLength + 1; + j = termLength - 1; + } + else + { + i = 0; + j = bytesDone; + } + + NSUInteger result = termLength; + + void *buf = [buffer mutableBytes]; + const void *termBuf = [term bytes]; + + while (i < bytesDone) + { + void *subbuf = buf + startOffset + i; + + if (memcmp(subbuf, termBuf, j) == 0) + { + result = termLength - j; + break; + } + + i++; + j--; + } + + if (maxLength > 0) + { + result = MIN(result, (maxLength - bytesDone)); + } + + if (!bufferOwner) + { + // We did NOT create the buffer. + // It is owned by the caller. + // Avoid resizing the buffer if at all possible. + + if ([buffer length] == originalBufferLength) + { + NSUInteger buffSize = [buffer length]; + NSUInteger buffSpace = buffSize - startOffset - bytesDone; + + if (buffSpace > 0) + { + result = MIN(result, buffSpace); + } + } + } + + return result; +} + +/** + * For read packets with a set terminator, + * returns the safe length of data that can be read from the given preBuffer, + * without going over a terminator or the maxLength. + * + * It is assumed the terminator has not already been read. +**/ +- (NSUInteger)readLengthForTermWithPreBuffer:(NSData *)preBuffer found:(BOOL *)foundPtr +{ + NSAssert(term != nil, @"This method does not apply to non-term reads"); + NSAssert([preBuffer length] > 0, @"Invoked with empty pre buffer!"); + + // We know that the terminator, as a whole, doesn't exist in our own buffer. + // But it is possible that a portion of it exists in our buffer. + // So we're going to look for the terminator starting with a portion of our own buffer. + // + // Example: + // + // term length = 3 bytes + // bytesDone = 5 bytes + // preBuffer length = 5 bytes + // + // If we append the preBuffer to our buffer, + // it would look like this: + // + // --------------------- + // |B|B|B|B|B|P|P|P|P|P| + // --------------------- + // + // So we start our search here: + // + // --------------------- + // |B|B|B|B|B|P|P|P|P|P| + // -------^-^-^--------- + // + // And move forwards... + // + // --------------------- + // |B|B|B|B|B|P|P|P|P|P| + // ---------^-^-^------- + // + // Until we find the terminator or reach the end. + // + // --------------------- + // |B|B|B|B|B|P|P|P|P|P| + // ---------------^-^-^- + + BOOL found = NO; + + NSUInteger termLength = [term length]; + NSUInteger preBufferLength = [preBuffer length]; + + if ((bytesDone + preBufferLength) < termLength) + { + // Not enough data for a full term sequence yet + return preBufferLength; + } + + NSUInteger maxPreBufferLength; + if (maxLength > 0) { + maxPreBufferLength = MIN(preBufferLength, (maxLength - bytesDone)); + + // Note: maxLength >= termLength + } + else { + maxPreBufferLength = preBufferLength; + } + + Byte seq[termLength]; + const void *termBuf = [term bytes]; + + NSUInteger bufLen = MIN(bytesDone, (termLength - 1)); + void *buf = [buffer mutableBytes] + startOffset + bytesDone - bufLen; + + NSUInteger preLen = termLength - bufLen; + void *pre = (void *)[preBuffer bytes]; + + NSUInteger loopCount = bufLen + maxPreBufferLength - termLength + 1; // Plus one. See example above. + + NSUInteger result = preBufferLength; + + NSUInteger i; + for (i = 0; i < loopCount; i++) + { + if (bufLen > 0) + { + // Combining bytes from buffer and preBuffer + + memcpy(seq, buf, bufLen); + memcpy(seq + bufLen, pre, preLen); + + if (memcmp(seq, termBuf, termLength) == 0) + { + result = preLen; + found = YES; + break; + } + + buf++; + bufLen--; + preLen++; + } + else + { + // Comparing directly from preBuffer + + if (memcmp(pre, termBuf, termLength) == 0) + { + NSUInteger preOffset = pre - [preBuffer bytes]; // pointer arithmetic + + result = preOffset + termLength; + found = YES; + break; + } + + pre++; + } + } + + // There is no need to avoid resizing the buffer in this particular situation. + + if (foundPtr) *foundPtr = found; + return result; +} + +/** + * Assuming pre-buffering is enabled, returns the amount of data that can be read + * without going over the maxLength. +**/ +- (NSUInteger)prebufferReadLengthForTerm +{ + NSAssert(term != nil, @"This method does not apply to non-term reads"); + + NSUInteger result = READALL_CHUNKSIZE; + + if (maxLength > 0) + { + result = MIN(result, (maxLength - bytesDone)); + } + + if (!bufferOwner) + { + // We did NOT create the buffer. + // It is owned by the caller. + // Avoid resizing the buffer if at all possible. + + if ([buffer length] == originalBufferLength) + { + NSUInteger buffSize = [buffer length]; + NSUInteger buffSpace = buffSize - startOffset - bytesDone; + + if (buffSpace > 0) + { + result = MIN(result, buffSpace); + } + } + } + + return result; +} + +/** + * For read packets with a set terminator, scans the packet buffer for the term. + * It is assumed the terminator had not been fully read prior to the new bytes. + * + * If the term is found, the number of excess bytes after the term are returned. + * If the term is not found, this method will return -1. + * + * Note: A return value of zero means the term was found at the very end. +**/ +- (NSInteger)searchForTermAfterPreBuffering:(NSUInteger)numBytes +{ + NSAssert(term != nil, @"This method does not apply to non-term reads"); + NSAssert(bytesDone >= numBytes, @"Invoked with invalid numBytes!"); + + // We try to start the search such that the first new byte read matches up with the last byte of the term. + // We continue searching forward after this until the term no longer fits into the buffer. + + NSUInteger termLength = [term length]; + const void *termBuffer = [term bytes]; + + // Remember: This method is called after the bytesDone variable has been updated. + + NSUInteger prevBytesDone = bytesDone - numBytes; + + NSUInteger i; + if (prevBytesDone >= termLength) + i = prevBytesDone - termLength + 1; + else + i = 0; + + while ((i + termLength) <= bytesDone) + { + void *subBuffer = [buffer mutableBytes] + startOffset + i; + + if(memcmp(subBuffer, termBuffer, termLength) == 0) + { + return bytesDone - (i + termLength); + } + + i++; + } + + return -1; +} + +- (void)dealloc +{ + [buffer release]; + [term release]; + [super dealloc]; +} + +@end + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * The AsyncWritePacket encompasses the instructions for any given write. +**/ +@interface AsyncWritePacket : NSObject +{ + @public + NSData *buffer; + NSUInteger bytesDone; + long tag; + NSTimeInterval timeout; +} +- (id)initWithData:(NSData *)d timeout:(NSTimeInterval)t tag:(long)i; +@end + +@implementation AsyncWritePacket + +- (id)initWithData:(NSData *)d timeout:(NSTimeInterval)t tag:(long)i +{ + if((self = [super init])) + { + buffer = [d retain]; + timeout = t; + tag = i; + bytesDone = 0; + } + return self; +} + +- (void)dealloc +{ + [buffer release]; + [super dealloc]; +} + +@end + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * The AsyncSpecialPacket encompasses special instructions for interruptions in the read/write queues. + * This class my be altered to support more than just TLS in the future. +**/ +@interface AsyncSpecialPacket : NSObject +{ + @public + NSDictionary *tlsSettings; +} +- (id)initWithTLSSettings:(NSDictionary *)settings; +@end + +@implementation AsyncSpecialPacket + +- (id)initWithTLSSettings:(NSDictionary *)settings +{ + if((self = [super init])) + { + tlsSettings = [settings copy]; + } + return self; +} + +- (void)dealloc +{ + [tlsSettings release]; + [super dealloc]; +} + +@end + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +@implementation AsyncSocket + +- (id)init +{ + return [self initWithDelegate:nil userData:0]; +} + +- (id)initWithDelegate:(id)delegate +{ + return [self initWithDelegate:delegate userData:0]; +} + +// Designated initializer. +- (id)initWithDelegate:(id)delegate userData:(long)userData +{ + if((self = [super init])) + { + theFlags = DEFAULT_PREBUFFERING ? kEnablePreBuffering : 0; + theDelegate = delegate; + theUserData = userData; + + theNativeSocket4 = 0; + theNativeSocket6 = 0; + + theSocket4 = NULL; + theSource4 = NULL; + + theSocket6 = NULL; + theSource6 = NULL; + + theRunLoop = NULL; + theReadStream = NULL; + theWriteStream = NULL; + + theConnectTimer = nil; + + theReadQueue = [[NSMutableArray alloc] initWithCapacity:READQUEUE_CAPACITY]; + theCurrentRead = nil; + theReadTimer = nil; + + partialReadBuffer = [[NSMutableData alloc] initWithCapacity:READALL_CHUNKSIZE]; + + theWriteQueue = [[NSMutableArray alloc] initWithCapacity:WRITEQUEUE_CAPACITY]; + theCurrentWrite = nil; + theWriteTimer = nil; + + // Socket context + NSAssert(sizeof(CFSocketContext) == sizeof(CFStreamClientContext), @"CFSocketContext != CFStreamClientContext"); + theContext.version = 0; + theContext.info = self; + theContext.retain = nil; + theContext.release = nil; + theContext.copyDescription = nil; + + // Default run loop modes + theRunLoopModes = [[NSArray arrayWithObject:NSDefaultRunLoopMode] retain]; + } + return self; +} + +// The socket may been initialized in a connected state and auto-released, so this should close it down cleanly. +- (void)dealloc +{ + [self close]; + [theReadQueue release]; + [theWriteQueue release]; + [theRunLoopModes release]; + [partialReadBuffer release]; + [NSObject cancelPreviousPerformRequestsWithTarget:self]; + [super dealloc]; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Accessors +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (long)userData +{ + return theUserData; +} + +- (void)setUserData:(long)userData +{ + theUserData = userData; +} + +- (id)delegate +{ + return theDelegate; +} + +- (void)setDelegate:(id)delegate +{ + theDelegate = delegate; +} + +- (BOOL)canSafelySetDelegate +{ + return ([theReadQueue count] == 0 && [theWriteQueue count] == 0 && theCurrentRead == nil && theCurrentWrite == nil); +} + +- (CFSocketRef)getCFSocket +{ + if(theSocket4) + return theSocket4; + else + return theSocket6; +} + +- (CFReadStreamRef)getCFReadStream +{ + return theReadStream; +} + +- (CFWriteStreamRef)getCFWriteStream +{ + return theWriteStream; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Progress +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (float)progressOfReadReturningTag:(long *)tag bytesDone:(NSUInteger *)done total:(NSUInteger *)total +{ + // Check to make sure we're actually reading something right now, + // and that the read packet isn't an AsyncSpecialPacket (upgrade to TLS). + if (!theCurrentRead || ![theCurrentRead isKindOfClass:[AsyncReadPacket class]]) + { + if (tag != NULL) *tag = 0; + if (done != NULL) *done = 0; + if (total != NULL) *total = 0; + + return NAN; + } + + // It's only possible to know the progress of our read if we're reading to a certain length. + // If we're reading to data, we of course have no idea when the data will arrive. + // If we're reading to timeout, then we have no idea when the next chunk of data will arrive. + + NSUInteger d = theCurrentRead->bytesDone; + NSUInteger t = theCurrentRead->readLength; + + if (tag != NULL) *tag = theCurrentRead->tag; + if (done != NULL) *done = d; + if (total != NULL) *total = t; + + if (t > 0.0) + return (float)d / (float)t; + else + return 1.0F; +} + +- (float)progressOfWriteReturningTag:(long *)tag bytesDone:(NSUInteger *)done total:(NSUInteger *)total +{ + // Check to make sure we're actually writing something right now, + // and that the write packet isn't an AsyncSpecialPacket (upgrade to TLS). + if (!theCurrentWrite || ![theCurrentWrite isKindOfClass:[AsyncWritePacket class]]) + { + if (tag != NULL) *tag = 0; + if (done != NULL) *done = 0; + if (total != NULL) *total = 0; + + return NAN; + } + + NSUInteger d = theCurrentWrite->bytesDone; + NSUInteger t = [theCurrentWrite->buffer length]; + + if (tag != NULL) *tag = theCurrentWrite->tag; + if (done != NULL) *done = d; + if (total != NULL) *total = t; + + return (float)d / (float)t; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Run Loop +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (void)runLoopAddSource:(CFRunLoopSourceRef)source +{ + NSUInteger i, count = [theRunLoopModes count]; + for(i = 0; i < count; i++) + { + CFStringRef runLoopMode = (CFStringRef)[theRunLoopModes objectAtIndex:i]; + CFRunLoopAddSource(theRunLoop, source, runLoopMode); + } +} + +- (void)runLoopRemoveSource:(CFRunLoopSourceRef)source +{ + NSUInteger i, count = [theRunLoopModes count]; + for(i = 0; i < count; i++) + { + CFStringRef runLoopMode = (CFStringRef)[theRunLoopModes objectAtIndex:i]; + CFRunLoopRemoveSource(theRunLoop, source, runLoopMode); + } +} + +- (void)runLoopAddSource:(CFRunLoopSourceRef)source mode:(NSString *)runLoopMode +{ + CFRunLoopAddSource(theRunLoop, source, (CFStringRef)runLoopMode); +} + +- (void)runLoopRemoveSource:(CFRunLoopSourceRef)source mode:(NSString *)runLoopMode +{ + CFRunLoopRemoveSource(theRunLoop, source, (CFStringRef)runLoopMode); +} + +- (void)runLoopAddTimer:(NSTimer *)timer +{ + NSUInteger i, count = [theRunLoopModes count]; + for(i = 0; i < count; i++) + { + CFStringRef runLoopMode = (CFStringRef)[theRunLoopModes objectAtIndex:i]; + CFRunLoopAddTimer(theRunLoop, (CFRunLoopTimerRef)timer, runLoopMode); + } +} + +- (void)runLoopRemoveTimer:(NSTimer *)timer +{ + NSUInteger i, count = [theRunLoopModes count]; + for(i = 0; i < count; i++) + { + CFStringRef runLoopMode = (CFStringRef)[theRunLoopModes objectAtIndex:i]; + CFRunLoopRemoveTimer(theRunLoop, (CFRunLoopTimerRef)timer, runLoopMode); + } +} + +- (void)runLoopAddTimer:(NSTimer *)timer mode:(NSString *)runLoopMode +{ + CFRunLoopAddTimer(theRunLoop, (CFRunLoopTimerRef)timer, (CFStringRef)runLoopMode); +} + +- (void)runLoopRemoveTimer:(NSTimer *)timer mode:(NSString *)runLoopMode +{ + CFRunLoopRemoveTimer(theRunLoop, (CFRunLoopTimerRef)timer, (CFStringRef)runLoopMode); +} + +- (void)runLoopUnscheduleReadStream +{ + NSUInteger i, count = [theRunLoopModes count]; + for(i = 0; i < count; i++) + { + CFStringRef runLoopMode = (CFStringRef)[theRunLoopModes objectAtIndex:i]; + CFReadStreamUnscheduleFromRunLoop(theReadStream, theRunLoop, runLoopMode); + } + CFReadStreamSetClient(theReadStream, kCFStreamEventNone, NULL, NULL); +} + +- (void)runLoopUnscheduleWriteStream +{ + NSUInteger i, count = [theRunLoopModes count]; + for(i = 0; i < count; i++) + { + CFStringRef runLoopMode = (CFStringRef)[theRunLoopModes objectAtIndex:i]; + CFWriteStreamUnscheduleFromRunLoop(theWriteStream, theRunLoop, runLoopMode); + } + CFWriteStreamSetClient(theWriteStream, kCFStreamEventNone, NULL, NULL); +} + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Configuration +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * See the header file for a full explanation of pre-buffering. +**/ +- (void)enablePreBuffering +{ + theFlags |= kEnablePreBuffering; +} + +/** + * See the header file for a full explanation of this method. +**/ +- (BOOL)moveToRunLoop:(NSRunLoop *)runLoop +{ + NSAssert((theRunLoop == NULL) || (theRunLoop == CFRunLoopGetCurrent()), + @"moveToRunLoop must be called from within the current RunLoop!"); + + if(runLoop == nil) + { + return NO; + } + if(theRunLoop == [runLoop getCFRunLoop]) + { + return YES; + } + + [NSObject cancelPreviousPerformRequestsWithTarget:self]; + theFlags &= ~kDequeueReadScheduled; + theFlags &= ~kDequeueWriteScheduled; + + if(theReadStream && theWriteStream) + { + [self runLoopUnscheduleReadStream]; + [self runLoopUnscheduleWriteStream]; + } + + if(theSource4) [self runLoopRemoveSource:theSource4]; + if(theSource6) [self runLoopRemoveSource:theSource6]; + + // We do not retain the timers - they get retained by the runloop when we add them as a source. + // Since we're about to remove them as a source, we retain now, and release again below. + [theReadTimer retain]; + [theWriteTimer retain]; + + if(theReadTimer) [self runLoopRemoveTimer:theReadTimer]; + if(theWriteTimer) [self runLoopRemoveTimer:theWriteTimer]; + + theRunLoop = [runLoop getCFRunLoop]; + + if(theReadTimer) [self runLoopAddTimer:theReadTimer]; + if(theWriteTimer) [self runLoopAddTimer:theWriteTimer]; + + // Release timers since we retained them above + [theReadTimer release]; + [theWriteTimer release]; + + if(theSource4) [self runLoopAddSource:theSource4]; + if(theSource6) [self runLoopAddSource:theSource6]; + + if(theReadStream && theWriteStream) + { + if(![self attachStreamsToRunLoop:runLoop error:nil]) + { + return NO; + } + } + + [runLoop performSelector:@selector(maybeDequeueRead) target:self argument:nil order:0 modes:theRunLoopModes]; + [runLoop performSelector:@selector(maybeDequeueWrite) target:self argument:nil order:0 modes:theRunLoopModes]; + [runLoop performSelector:@selector(maybeScheduleDisconnect) target:self argument:nil order:0 modes:theRunLoopModes]; + + return YES; +} + +/** + * See the header file for a full explanation of this method. +**/ +- (BOOL)setRunLoopModes:(NSArray *)runLoopModes +{ + NSAssert((theRunLoop == NULL) || (theRunLoop == CFRunLoopGetCurrent()), + @"setRunLoopModes must be called from within the current RunLoop!"); + + if([runLoopModes count] == 0) + { + return NO; + } + if([theRunLoopModes isEqualToArray:runLoopModes]) + { + return YES; + } + + [NSObject cancelPreviousPerformRequestsWithTarget:self]; + theFlags &= ~kDequeueReadScheduled; + theFlags &= ~kDequeueWriteScheduled; + + if(theReadStream && theWriteStream) + { + [self runLoopUnscheduleReadStream]; + [self runLoopUnscheduleWriteStream]; + } + + if(theSource4) [self runLoopRemoveSource:theSource4]; + if(theSource6) [self runLoopRemoveSource:theSource6]; + + // We do not retain the timers - they get retained by the runloop when we add them as a source. + // Since we're about to remove them as a source, we retain now, and release again below. + [theReadTimer retain]; + [theWriteTimer retain]; + + if(theReadTimer) [self runLoopRemoveTimer:theReadTimer]; + if(theWriteTimer) [self runLoopRemoveTimer:theWriteTimer]; + + [theRunLoopModes release]; + theRunLoopModes = [runLoopModes copy]; + + if(theReadTimer) [self runLoopAddTimer:theReadTimer]; + if(theWriteTimer) [self runLoopAddTimer:theWriteTimer]; + + // Release timers since we retained them above + [theReadTimer release]; + [theWriteTimer release]; + + if(theSource4) [self runLoopAddSource:theSource4]; + if(theSource6) [self runLoopAddSource:theSource6]; + + if(theReadStream && theWriteStream) + { + // Note: theRunLoop variable is a CFRunLoop, and NSRunLoop is NOT toll-free bridged with CFRunLoop. + // So we cannot pass theRunLoop to the method below, which is expecting a NSRunLoop parameter. + // Instead we pass nil, which will result in the method properly using the current run loop. + + if(![self attachStreamsToRunLoop:nil error:nil]) + { + return NO; + } + } + + [self performSelector:@selector(maybeDequeueRead) withObject:nil afterDelay:0 inModes:theRunLoopModes]; + [self performSelector:@selector(maybeDequeueWrite) withObject:nil afterDelay:0 inModes:theRunLoopModes]; + [self performSelector:@selector(maybeScheduleDisconnect) withObject:nil afterDelay:0 inModes:theRunLoopModes]; + + return YES; +} + +- (BOOL)addRunLoopMode:(NSString *)runLoopMode +{ + NSAssert((theRunLoop == NULL) || (theRunLoop == CFRunLoopGetCurrent()), + @"addRunLoopMode must be called from within the current RunLoop!"); + + if(runLoopMode == nil) + { + return NO; + } + if([theRunLoopModes containsObject:runLoopMode]) + { + return YES; + } + + [NSObject cancelPreviousPerformRequestsWithTarget:self]; + theFlags &= ~kDequeueReadScheduled; + theFlags &= ~kDequeueWriteScheduled; + + NSArray *newRunLoopModes = [theRunLoopModes arrayByAddingObject:runLoopMode]; + [theRunLoopModes release]; + theRunLoopModes = [newRunLoopModes retain]; + + if(theReadTimer) [self runLoopAddTimer:theReadTimer mode:runLoopMode]; + if(theWriteTimer) [self runLoopAddTimer:theWriteTimer mode:runLoopMode]; + + if(theSource4) [self runLoopAddSource:theSource4 mode:runLoopMode]; + if(theSource6) [self runLoopAddSource:theSource6 mode:runLoopMode]; + + if(theReadStream && theWriteStream) + { + CFReadStreamScheduleWithRunLoop(theReadStream, CFRunLoopGetCurrent(), (CFStringRef)runLoopMode); + CFWriteStreamScheduleWithRunLoop(theWriteStream, CFRunLoopGetCurrent(), (CFStringRef)runLoopMode); + } + + [self performSelector:@selector(maybeDequeueRead) withObject:nil afterDelay:0 inModes:theRunLoopModes]; + [self performSelector:@selector(maybeDequeueWrite) withObject:nil afterDelay:0 inModes:theRunLoopModes]; + [self performSelector:@selector(maybeScheduleDisconnect) withObject:nil afterDelay:0 inModes:theRunLoopModes]; + + return YES; +} + +- (BOOL)removeRunLoopMode:(NSString *)runLoopMode +{ + NSAssert((theRunLoop == NULL) || (theRunLoop == CFRunLoopGetCurrent()), + @"addRunLoopMode must be called from within the current RunLoop!"); + + if(runLoopMode == nil) + { + return NO; + } + if(![theRunLoopModes containsObject:runLoopMode]) + { + return YES; + } + + NSMutableArray *newRunLoopModes = [[theRunLoopModes mutableCopy] autorelease]; + [newRunLoopModes removeObject:runLoopMode]; + + if([newRunLoopModes count] == 0) + { + return NO; + } + + [NSObject cancelPreviousPerformRequestsWithTarget:self]; + theFlags &= ~kDequeueReadScheduled; + theFlags &= ~kDequeueWriteScheduled; + + [theRunLoopModes release]; + theRunLoopModes = [newRunLoopModes copy]; + + if(theReadTimer) [self runLoopRemoveTimer:theReadTimer mode:runLoopMode]; + if(theWriteTimer) [self runLoopRemoveTimer:theWriteTimer mode:runLoopMode]; + + if(theSource4) [self runLoopRemoveSource:theSource4 mode:runLoopMode]; + if(theSource6) [self runLoopRemoveSource:theSource6 mode:runLoopMode]; + + if(theReadStream && theWriteStream) + { + CFReadStreamScheduleWithRunLoop(theReadStream, CFRunLoopGetCurrent(), (CFStringRef)runLoopMode); + CFWriteStreamScheduleWithRunLoop(theWriteStream, CFRunLoopGetCurrent(), (CFStringRef)runLoopMode); + } + + [self performSelector:@selector(maybeDequeueRead) withObject:nil afterDelay:0 inModes:theRunLoopModes]; + [self performSelector:@selector(maybeDequeueWrite) withObject:nil afterDelay:0 inModes:theRunLoopModes]; + [self performSelector:@selector(maybeScheduleDisconnect) withObject:nil afterDelay:0 inModes:theRunLoopModes]; + + return YES; +} + +- (NSArray *)runLoopModes +{ + return [[theRunLoopModes retain] autorelease]; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Accepting +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (BOOL)acceptOnPort:(UInt16)port error:(NSError **)errPtr +{ + return [self acceptOnInterface:nil port:port error:errPtr]; +} + +/** + * To accept on a certain interface, pass the address to accept on. + * To accept on any interface, pass nil or an empty string. + * To accept only connections from localhost pass "localhost" or "loopback". +**/ +- (BOOL)acceptOnInterface:(NSString *)interface port:(UInt16)port error:(NSError **)errPtr +{ + if (theDelegate == NULL) + { + [NSException raise:AsyncSocketException + format:@"Attempting to accept without a delegate. Set a delegate first."]; + } + + if (theSocket4 != NULL || theSocket6 != NULL) + { + [NSException raise:AsyncSocketException + format:@"Attempting to accept while connected or accepting connections. Disconnect first."]; + } + + // Clear queues (spurious read/write requests post disconnect) + [self emptyQueues]; + + // Set up the listen sockaddr structs if needed. + + NSData *address4 = nil, *address6 = nil; + if(interface == nil || ([interface length] == 0)) + { + // Accept on ANY address + struct sockaddr_in nativeAddr4; + nativeAddr4.sin_len = sizeof(struct sockaddr_in); + nativeAddr4.sin_family = AF_INET; + nativeAddr4.sin_port = htons(port); + nativeAddr4.sin_addr.s_addr = htonl(INADDR_ANY); + memset(&(nativeAddr4.sin_zero), 0, sizeof(nativeAddr4.sin_zero)); + + struct sockaddr_in6 nativeAddr6; + nativeAddr6.sin6_len = sizeof(struct sockaddr_in6); + nativeAddr6.sin6_family = AF_INET6; + nativeAddr6.sin6_port = htons(port); + nativeAddr6.sin6_flowinfo = 0; + nativeAddr6.sin6_addr = in6addr_any; + nativeAddr6.sin6_scope_id = 0; + + // Wrap the native address structures for CFSocketSetAddress. + address4 = [NSData dataWithBytes:&nativeAddr4 length:sizeof(nativeAddr4)]; + address6 = [NSData dataWithBytes:&nativeAddr6 length:sizeof(nativeAddr6)]; + } + else if([interface isEqualToString:@"localhost"] || [interface isEqualToString:@"loopback"]) + { + // Accept only on LOOPBACK address + struct sockaddr_in nativeAddr4; + nativeAddr4.sin_len = sizeof(struct sockaddr_in); + nativeAddr4.sin_family = AF_INET; + nativeAddr4.sin_port = htons(port); + nativeAddr4.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + memset(&(nativeAddr4.sin_zero), 0, sizeof(nativeAddr4.sin_zero)); + + struct sockaddr_in6 nativeAddr6; + nativeAddr6.sin6_len = sizeof(struct sockaddr_in6); + nativeAddr6.sin6_family = AF_INET6; + nativeAddr6.sin6_port = htons(port); + nativeAddr6.sin6_flowinfo = 0; + nativeAddr6.sin6_addr = in6addr_loopback; + nativeAddr6.sin6_scope_id = 0; + + // Wrap the native address structures for CFSocketSetAddress. + address4 = [NSData dataWithBytes:&nativeAddr4 length:sizeof(nativeAddr4)]; + address6 = [NSData dataWithBytes:&nativeAddr6 length:sizeof(nativeAddr6)]; + } + else + { + NSString *portStr = [NSString stringWithFormat:@"%hu", port]; + +#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 + @synchronized (getaddrinfoLock) +#endif + { + struct addrinfo hints, *res, *res0; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = PF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + hints.ai_flags = AI_PASSIVE; + + int error = getaddrinfo([interface UTF8String], [portStr UTF8String], &hints, &res0); + + if(error) + { + if(errPtr) + { + NSString *errMsg = [NSString stringWithCString:gai_strerror(error) encoding:NSASCIIStringEncoding]; + NSDictionary *info = [NSDictionary dictionaryWithObject:errMsg forKey:NSLocalizedDescriptionKey]; + + *errPtr = [NSError errorWithDomain:@"kCFStreamErrorDomainNetDB" code:error userInfo:info]; + } + } + + for(res = res0; res; res = res->ai_next) + { + if(!address4 && (res->ai_family == AF_INET)) + { + // Found IPv4 address + // Wrap the native address structures for CFSocketSetAddress. + address4 = [NSData dataWithBytes:res->ai_addr length:res->ai_addrlen]; + } + else if(!address6 && (res->ai_family == AF_INET6)) + { + // Found IPv6 address + // Wrap the native address structures for CFSocketSetAddress. + address6 = [NSData dataWithBytes:res->ai_addr length:res->ai_addrlen]; + } + } + freeaddrinfo(res0); + } + + if(!address4 && !address6) return NO; + } + + // Create the sockets. + + if (address4) + { + theSocket4 = [self newAcceptSocketForAddress:address4 error:errPtr]; + if (theSocket4 == NULL) goto Failed; + } + + if (address6) + { + theSocket6 = [self newAcceptSocketForAddress:address6 error:errPtr]; + + // Note: The iPhone doesn't currently support IPv6 + +#if !TARGET_OS_IPHONE + if (theSocket6 == NULL) goto Failed; +#endif + } + + // Attach the sockets to the run loop so that callback methods work + + [self attachSocketsToRunLoop:nil error:nil]; + + // Set the SO_REUSEADDR flags. + + int reuseOn = 1; + if (theSocket4) setsockopt(CFSocketGetNative(theSocket4), SOL_SOCKET, SO_REUSEADDR, &reuseOn, sizeof(reuseOn)); + if (theSocket6) setsockopt(CFSocketGetNative(theSocket6), SOL_SOCKET, SO_REUSEADDR, &reuseOn, sizeof(reuseOn)); + + // Set the local bindings which causes the sockets to start listening. + + CFSocketError err; + if (theSocket4) + { + err = CFSocketSetAddress(theSocket4, (CFDataRef)address4); + if (err != kCFSocketSuccess) goto Failed; + + //NSLog(@"theSocket4: %hu", [self localPortFromCFSocket4:theSocket4]); + } + + if(port == 0 && theSocket4 && theSocket6) + { + // The user has passed in port 0, which means he wants to allow the kernel to choose the port for them + // However, the kernel will choose a different port for both theSocket4 and theSocket6 + // So we grab the port the kernel choose for theSocket4, and set it as the port for theSocket6 + UInt16 chosenPort = [self localPortFromCFSocket4:theSocket4]; + + struct sockaddr_in6 *pSockAddr6 = (struct sockaddr_in6 *)[address6 bytes]; + pSockAddr6->sin6_port = htons(chosenPort); + } + + if (theSocket6) + { + err = CFSocketSetAddress(theSocket6, (CFDataRef)address6); + if (err != kCFSocketSuccess) goto Failed; + + //NSLog(@"theSocket6: %hu", [self localPortFromCFSocket6:theSocket6]); + } + + theFlags |= kDidStartDelegate; + return YES; + +Failed: + if(errPtr) *errPtr = [self getSocketError]; + if(theSocket4 != NULL) + { + CFSocketInvalidate(theSocket4); + CFRelease(theSocket4); + theSocket4 = NULL; + } + if(theSocket6 != NULL) + { + CFSocketInvalidate(theSocket6); + CFRelease(theSocket6); + theSocket6 = NULL; + } + return NO; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Connecting +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (BOOL)connectToHost:(NSString*)hostname onPort:(UInt16)port error:(NSError **)errPtr +{ + return [self connectToHost:hostname onPort:port withTimeout:-1 error:errPtr]; +} + +/** + * This method creates an initial CFReadStream and CFWriteStream to the given host on the given port. + * The connection is then opened, and the corresponding CFSocket will be extracted after the connection succeeds. + * + * Thus the delegate will have access to the CFReadStream and CFWriteStream prior to connection, + * specifically in the onSocketWillConnect: method. +**/ +- (BOOL)connectToHost:(NSString *)hostname + onPort:(UInt16)port + withTimeout:(NSTimeInterval)timeout + error:(NSError **)errPtr +{ + if(theDelegate == NULL) + { + [NSException raise:AsyncSocketException + format:@"Attempting to connect without a delegate. Set a delegate first."]; + } + + if(![self isDisconnected]) + { + [NSException raise:AsyncSocketException + format:@"Attempting to connect while connected or accepting connections. Disconnect first."]; + } + + // Clear queues (spurious read/write requests post disconnect) + [self emptyQueues]; + + if(![self createStreamsToHost:hostname onPort:port error:errPtr]) goto Failed; + if(![self attachStreamsToRunLoop:nil error:errPtr]) goto Failed; + if(![self configureStreamsAndReturnError:errPtr]) goto Failed; + if(![self openStreamsAndReturnError:errPtr]) goto Failed; + + [self startConnectTimeout:timeout]; + theFlags |= kDidStartDelegate; + + return YES; + +Failed: + [self close]; + return NO; +} + +- (BOOL)connectToAddress:(NSData *)remoteAddr error:(NSError **)errPtr +{ + return [self connectToAddress:remoteAddr viaInterfaceAddress:nil withTimeout:-1 error:errPtr]; +} + +/** + * This method creates an initial CFSocket to the given address. + * The connection is then opened, and the corresponding CFReadStream and CFWriteStream will be + * created from the low-level sockets after the connection succeeds. + * + * Thus the delegate will have access to the CFSocket and CFSocketNativeHandle (BSD socket) prior to connection, + * specifically in the onSocketWillConnect: method. + * + * Note: The NSData parameter is expected to be a sockaddr structure. For example, an NSData object returned from + * NSNetservice addresses method. + * If you have an existing struct sockaddr you can convert it to an NSData object like so: + * struct sockaddr sa -> NSData *dsa = [NSData dataWithBytes:&remoteAddr length:remoteAddr.sa_len]; + * struct sockaddr *sa -> NSData *dsa = [NSData dataWithBytes:remoteAddr length:remoteAddr->sa_len]; +**/ +- (BOOL)connectToAddress:(NSData *)remoteAddr withTimeout:(NSTimeInterval)timeout error:(NSError **)errPtr +{ + return [self connectToAddress:remoteAddr viaInterfaceAddress:nil withTimeout:timeout error:errPtr]; +} + +/** + * This method is similar to the one above, but allows you to specify which socket interface + * the connection should run over. E.g. ethernet, wifi, bluetooth, etc. +**/ +- (BOOL)connectToAddress:(NSData *)remoteAddr + viaInterfaceAddress:(NSData *)interfaceAddr + withTimeout:(NSTimeInterval)timeout + error:(NSError **)errPtr +{ + if (theDelegate == NULL) + { + [NSException raise:AsyncSocketException + format:@"Attempting to connect without a delegate. Set a delegate first."]; + } + + if (![self isDisconnected]) + { + [NSException raise:AsyncSocketException + format:@"Attempting to connect while connected or accepting connections. Disconnect first."]; + } + + // Clear queues (spurious read/write requests post disconnect) + [self emptyQueues]; + + if(![self createSocketForAddress:remoteAddr error:errPtr]) goto Failed; + if(![self bindSocketToAddress:interfaceAddr error:errPtr]) goto Failed; + if(![self attachSocketsToRunLoop:nil error:errPtr]) goto Failed; + if(![self configureSocketAndReturnError:errPtr]) goto Failed; + if(![self connectSocketToAddress:remoteAddr error:errPtr]) goto Failed; + + [self startConnectTimeout:timeout]; + theFlags |= kDidStartDelegate; + + return YES; + +Failed: + [self close]; + return NO; +} + +- (void)startConnectTimeout:(NSTimeInterval)timeout +{ + if(timeout >= 0.0) + { + theConnectTimer = [NSTimer timerWithTimeInterval:timeout + target:self + selector:@selector(doConnectTimeout:) + userInfo:nil + repeats:NO]; + [self runLoopAddTimer:theConnectTimer]; + } +} + +- (void)endConnectTimeout +{ + [theConnectTimer invalidate]; + theConnectTimer = nil; +} + +- (void)doConnectTimeout:(NSTimer *)timer +{ + [self endConnectTimeout]; + [self closeWithError:[self getConnectTimeoutError]]; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Socket Implementation +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Creates the accept sockets. + * Returns true if either IPv4 or IPv6 is created. + * If either is missing, an error is returned (even though the method may return true). +**/ +- (CFSocketRef)newAcceptSocketForAddress:(NSData *)addr error:(NSError **)errPtr +{ + struct sockaddr *pSockAddr = (struct sockaddr *)[addr bytes]; + int addressFamily = pSockAddr->sa_family; + + CFSocketRef theSocket = CFSocketCreate(kCFAllocatorDefault, + addressFamily, + SOCK_STREAM, + 0, + kCFSocketAcceptCallBack, // Callback flags + (CFSocketCallBack)&MyCFSocketCallback, // Callback method + &theContext); + + if(theSocket == NULL) + { + if(errPtr) *errPtr = [self getSocketError]; + } + + return theSocket; +} + +- (BOOL)createSocketForAddress:(NSData *)remoteAddr error:(NSError **)errPtr +{ + struct sockaddr *pSockAddr = (struct sockaddr *)[remoteAddr bytes]; + + if(pSockAddr->sa_family == AF_INET) + { + theSocket4 = CFSocketCreate(NULL, // Default allocator + PF_INET, // Protocol Family + SOCK_STREAM, // Socket Type + IPPROTO_TCP, // Protocol + kCFSocketConnectCallBack, // Callback flags + (CFSocketCallBack)&MyCFSocketCallback, // Callback method + &theContext); // Socket Context + + if(theSocket4 == NULL) + { + if (errPtr) *errPtr = [self getSocketError]; + return NO; + } + } + else if(pSockAddr->sa_family == AF_INET6) + { + theSocket6 = CFSocketCreate(NULL, // Default allocator + PF_INET6, // Protocol Family + SOCK_STREAM, // Socket Type + IPPROTO_TCP, // Protocol + kCFSocketConnectCallBack, // Callback flags + (CFSocketCallBack)&MyCFSocketCallback, // Callback method + &theContext); // Socket Context + + if(theSocket6 == NULL) + { + if (errPtr) *errPtr = [self getSocketError]; + return NO; + } + } + else + { + if (errPtr) + { + NSString *errMsg = @"Remote address is not IPv4 or IPv6"; + NSDictionary *info = [NSDictionary dictionaryWithObject:errMsg forKey:NSLocalizedDescriptionKey]; + + *errPtr = [NSError errorWithDomain:AsyncSocketErrorDomain code:AsyncSocketCFSocketError userInfo:info]; + } + return NO; + } + + return YES; +} + +- (BOOL)bindSocketToAddress:(NSData *)interfaceAddr error:(NSError **)errPtr +{ + if (interfaceAddr == nil) return YES; + + struct sockaddr *pSockAddr = (struct sockaddr *)[interfaceAddr bytes]; + + CFSocketRef theSocket = (theSocket4 != NULL) ? theSocket4 : theSocket6; + NSAssert((theSocket != NULL), @"bindSocketToAddress called without valid socket"); + + CFSocketNativeHandle nativeSocket = CFSocketGetNative(theSocket); + + if (pSockAddr->sa_family == AF_INET || pSockAddr->sa_family == AF_INET6) + { + int result = bind(nativeSocket, pSockAddr, (socklen_t)[interfaceAddr length]); + if (result != 0) + { + if (errPtr) *errPtr = [self getErrnoError]; + return NO; + } + } + else + { + if (errPtr) + { + NSString *errMsg = @"Interface address is not IPv4 or IPv6"; + NSDictionary *info = [NSDictionary dictionaryWithObject:errMsg forKey:NSLocalizedDescriptionKey]; + + *errPtr = [NSError errorWithDomain:AsyncSocketErrorDomain code:AsyncSocketCFSocketError userInfo:info]; + } + return NO; + } + + return YES; +} + +/** + * Adds the CFSocket's to the run-loop so that callbacks will work properly. +**/ +- (BOOL)attachSocketsToRunLoop:(NSRunLoop *)runLoop error:(NSError **)errPtr +{ + // Get the CFRunLoop to which the socket should be attached. + theRunLoop = (runLoop == nil) ? CFRunLoopGetCurrent() : [runLoop getCFRunLoop]; + + if(theSocket4) + { + theSource4 = CFSocketCreateRunLoopSource (kCFAllocatorDefault, theSocket4, 0); + [self runLoopAddSource:theSource4]; + } + + if(theSocket6) + { + theSource6 = CFSocketCreateRunLoopSource (kCFAllocatorDefault, theSocket6, 0); + [self runLoopAddSource:theSource6]; + } + + return YES; +} + +/** + * Allows the delegate method to configure the CFSocket or CFNativeSocket as desired before we connect. + * Note that the CFReadStream and CFWriteStream will not be available until after the connection is opened. +**/ +- (BOOL)configureSocketAndReturnError:(NSError **)errPtr +{ + // Call the delegate method for further configuration. + if([theDelegate respondsToSelector:@selector(onSocketWillConnect:)]) + { + if([theDelegate onSocketWillConnect:self] == NO) + { + if (errPtr) *errPtr = [self getAbortError]; + return NO; + } + } + return YES; +} + +- (BOOL)connectSocketToAddress:(NSData *)remoteAddr error:(NSError **)errPtr +{ + // Start connecting to the given address in the background + // The MyCFSocketCallback method will be called when the connection succeeds or fails + if(theSocket4) + { + CFSocketError err = CFSocketConnectToAddress(theSocket4, (CFDataRef)remoteAddr, -1); + if(err != kCFSocketSuccess) + { + if (errPtr) *errPtr = [self getSocketError]; + return NO; + } + } + else if(theSocket6) + { + CFSocketError err = CFSocketConnectToAddress(theSocket6, (CFDataRef)remoteAddr, -1); + if(err != kCFSocketSuccess) + { + if (errPtr) *errPtr = [self getSocketError]; + return NO; + } + } + + return YES; +} + +/** + * Attempt to make the new socket. + * If an error occurs, ignore this event. +**/ +- (void)doAcceptFromSocket:(CFSocketRef)parentSocket withNewNativeSocket:(CFSocketNativeHandle)newNativeSocket +{ + if(newNativeSocket) + { + // New socket inherits same delegate and run loop modes. + // Note: We use [self class] to support subclassing AsyncSocket. + AsyncSocket *newSocket = [[[[self class] alloc] initWithDelegate:theDelegate] autorelease]; + [newSocket setRunLoopModes:theRunLoopModes]; + + if(![newSocket createStreamsFromNative:newNativeSocket error:nil]) + goto Failed; + + if (parentSocket == theSocket4) + newSocket->theNativeSocket4 = newNativeSocket; + else + newSocket->theNativeSocket6 = newNativeSocket; + + if ([theDelegate respondsToSelector:@selector(onSocket:didAcceptNewSocket:)]) + [theDelegate onSocket:self didAcceptNewSocket:newSocket]; + + newSocket->theFlags |= kDidStartDelegate; + + NSRunLoop *runLoop = nil; + if ([theDelegate respondsToSelector:@selector(onSocket:wantsRunLoopForNewSocket:)]) + { + runLoop = [theDelegate onSocket:self wantsRunLoopForNewSocket:newSocket]; + } + + if(![newSocket attachStreamsToRunLoop:runLoop error:nil]) goto Failed; + if(![newSocket configureStreamsAndReturnError:nil]) goto Failed; + if(![newSocket openStreamsAndReturnError:nil]) goto Failed; + + return; + + Failed: + [newSocket close]; + } +} + +/** + * This method is called as a result of connectToAddress:withTimeout:error:. + * At this point we have an open CFSocket from which we need to create our read and write stream. +**/ +- (void)doSocketOpen:(CFSocketRef)sock withCFSocketError:(CFSocketError)socketError +{ + NSParameterAssert ((sock == theSocket4) || (sock == theSocket6)); + + if(socketError == kCFSocketTimeout || socketError == kCFSocketError) + { + [self closeWithError:[self getSocketError]]; + return; + } + + // Get the underlying native (BSD) socket + CFSocketNativeHandle nativeSocket = CFSocketGetNative(sock); + + // Store a reference to it + if (sock == theSocket4) + theNativeSocket4 = nativeSocket; + else + theNativeSocket6 = nativeSocket; + + // Setup the CFSocket so that invalidating it will not close the underlying native socket + CFSocketSetSocketFlags(sock, 0); + + // Invalidate and release the CFSocket - All we need from here on out is the nativeSocket. + // Note: If we don't invalidate the CFSocket (leaving the native socket open) + // then theReadStream and theWriteStream won't function properly. + // Specifically, their callbacks won't work, with the exception of kCFStreamEventOpenCompleted. + // + // This is likely due to the mixture of the CFSocketCreateWithNative method, + // along with the CFStreamCreatePairWithSocket method. + // The documentation for CFSocketCreateWithNative states: + // + // If a CFSocket object already exists for sock, + // the function returns the pre-existing object instead of creating a new object; + // the context, callout, and callBackTypes parameters are ignored in this case. + // + // So the CFStreamCreateWithNative method invokes the CFSocketCreateWithNative method, + // thinking that is creating a new underlying CFSocket for it's own purposes. + // When it does this, it uses the context/callout/callbackTypes parameters to setup everything appropriately. + // However, if a CFSocket already exists for the native socket, + // then it is returned (as per the documentation), which in turn screws up the CFStreams. + + CFSocketInvalidate(sock); + CFRelease(sock); + theSocket4 = NULL; + theSocket6 = NULL; + + NSError *err; + BOOL pass = YES; + + if(pass && ![self createStreamsFromNative:nativeSocket error:&err]) pass = NO; + if(pass && ![self attachStreamsToRunLoop:nil error:&err]) pass = NO; + if(pass && ![self openStreamsAndReturnError:&err]) pass = NO; + + if(!pass) + { + [self closeWithError:err]; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Stream Implementation +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Creates the CFReadStream and CFWriteStream from the given native socket. + * The CFSocket may be extracted from either stream after the streams have been opened. + * + * Note: The given native socket must already be connected! +**/ +- (BOOL)createStreamsFromNative:(CFSocketNativeHandle)native error:(NSError **)errPtr +{ + // Create the socket & streams. + CFStreamCreatePairWithSocket(kCFAllocatorDefault, native, &theReadStream, &theWriteStream); + if (theReadStream == NULL || theWriteStream == NULL) + { + NSError *err = [self getStreamError]; + + NSLog(@"AsyncSocket %p couldn't create streams from accepted socket: %@", self, err); + + if (errPtr) *errPtr = err; + return NO; + } + + // Ensure the CF & BSD socket is closed when the streams are closed. + CFReadStreamSetProperty(theReadStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue); + CFWriteStreamSetProperty(theWriteStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue); + + return YES; +} + +/** + * Creates the CFReadStream and CFWriteStream from the given hostname and port number. + * The CFSocket may be extracted from either stream after the streams have been opened. +**/ +- (BOOL)createStreamsToHost:(NSString *)hostname onPort:(UInt16)port error:(NSError **)errPtr +{ + // Create the socket & streams. + CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef)hostname, port, &theReadStream, &theWriteStream); + if (theReadStream == NULL || theWriteStream == NULL) + { + if (errPtr) *errPtr = [self getStreamError]; + return NO; + } + + // Ensure the CF & BSD socket is closed when the streams are closed. + CFReadStreamSetProperty(theReadStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue); + CFWriteStreamSetProperty(theWriteStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue); + + return YES; +} + +- (BOOL)attachStreamsToRunLoop:(NSRunLoop *)runLoop error:(NSError **)errPtr +{ + // Get the CFRunLoop to which the socket should be attached. + theRunLoop = (runLoop == nil) ? CFRunLoopGetCurrent() : [runLoop getCFRunLoop]; + + // Setup read stream callbacks + + CFOptionFlags readStreamEvents = kCFStreamEventHasBytesAvailable | + kCFStreamEventErrorOccurred | + kCFStreamEventEndEncountered | + kCFStreamEventOpenCompleted; + + if (!CFReadStreamSetClient(theReadStream, + readStreamEvents, + (CFReadStreamClientCallBack)&MyCFReadStreamCallback, + (CFStreamClientContext *)(&theContext))) + { + NSError *err = [self getStreamError]; + + NSLog (@"AsyncSocket %p couldn't attach read stream to run-loop,", self); + NSLog (@"Error: %@", err); + + if (errPtr) *errPtr = err; + return NO; + } + + // Setup write stream callbacks + + CFOptionFlags writeStreamEvents = kCFStreamEventCanAcceptBytes | + kCFStreamEventErrorOccurred | + kCFStreamEventEndEncountered | + kCFStreamEventOpenCompleted; + + if (!CFWriteStreamSetClient (theWriteStream, + writeStreamEvents, + (CFWriteStreamClientCallBack)&MyCFWriteStreamCallback, + (CFStreamClientContext *)(&theContext))) + { + NSError *err = [self getStreamError]; + + NSLog (@"AsyncSocket %p couldn't attach write stream to run-loop,", self); + NSLog (@"Error: %@", err); + + if (errPtr) *errPtr = err; + return NO; + } + + // Add read and write streams to run loop + + NSUInteger i, count = [theRunLoopModes count]; + for(i = 0; i < count; i++) + { + CFStringRef runLoopMode = (CFStringRef)[theRunLoopModes objectAtIndex:i]; + CFReadStreamScheduleWithRunLoop(theReadStream, theRunLoop, runLoopMode); + CFWriteStreamScheduleWithRunLoop(theWriteStream, theRunLoop, runLoopMode); + } + + return YES; +} + +/** + * Allows the delegate method to configure the CFReadStream and/or CFWriteStream as desired before we connect. + * + * If being called from a connect method, + * the CFSocket and CFNativeSocket will not be available until after the connection is opened. +**/ +- (BOOL)configureStreamsAndReturnError:(NSError **)errPtr +{ + // Call the delegate method for further configuration. + if([theDelegate respondsToSelector:@selector(onSocketWillConnect:)]) + { + if([theDelegate onSocketWillConnect:self] == NO) + { + if (errPtr) *errPtr = [self getAbortError]; + return NO; + } + } + return YES; +} + +- (BOOL)openStreamsAndReturnError:(NSError **)errPtr +{ + BOOL pass = YES; + + if(pass && !CFReadStreamOpen(theReadStream)) + { + NSLog (@"AsyncSocket %p couldn't open read stream,", self); + pass = NO; + } + + if(pass && !CFWriteStreamOpen(theWriteStream)) + { + NSLog (@"AsyncSocket %p couldn't open write stream,", self); + pass = NO; + } + + if(!pass) + { + if (errPtr) *errPtr = [self getStreamError]; + } + + return pass; +} + +/** + * Called when read or write streams open. + * When the socket is connected and both streams are open, consider the AsyncSocket instance to be ready. +**/ +- (void)doStreamOpen +{ + if ((theFlags & kDidCompleteOpenForRead) && (theFlags & kDidCompleteOpenForWrite)) + { + NSError *err = nil; + + // Get the socket + if (![self setSocketFromStreamsAndReturnError: &err]) + { + NSLog (@"AsyncSocket %p couldn't get socket from streams, %@. Disconnecting.", self, err); + [self closeWithError:err]; + return; + } + + // Stop the connection attempt timeout timer + [self endConnectTimeout]; + + if ([theDelegate respondsToSelector:@selector(onSocket:didConnectToHost:port:)]) + { + [theDelegate onSocket:self didConnectToHost:[self connectedHost] port:[self connectedPort]]; + } + + // Immediately deal with any already-queued requests. + [self maybeDequeueRead]; + [self maybeDequeueWrite]; + } +} + +- (BOOL)setSocketFromStreamsAndReturnError:(NSError **)errPtr +{ + // Get the CFSocketNativeHandle from theReadStream + CFSocketNativeHandle native; + CFDataRef nativeProp = CFReadStreamCopyProperty(theReadStream, kCFStreamPropertySocketNativeHandle); + if(nativeProp == NULL) + { + if (errPtr) *errPtr = [self getStreamError]; + return NO; + } + + CFIndex nativePropLen = CFDataGetLength(nativeProp); + CFIndex nativeLen = (CFIndex)sizeof(native); + + CFIndex len = MIN(nativePropLen, nativeLen); + + CFDataGetBytes(nativeProp, CFRangeMake(0, len), (UInt8 *)&native); + CFRelease(nativeProp); + + CFSocketRef theSocket = CFSocketCreateWithNative(kCFAllocatorDefault, native, 0, NULL, NULL); + if(theSocket == NULL) + { + if (errPtr) *errPtr = [self getSocketError]; + return NO; + } + + // Determine whether the connection was IPv4 or IPv6. + // We may already know if this was an accepted socket, + // or if the connectToAddress method was used. + // In either of the above two cases, the native socket variable would already be set. + + if (theNativeSocket4 > 0) + { + theSocket4 = theSocket; + return YES; + } + if (theNativeSocket6 > 0) + { + theSocket6 = theSocket; + return YES; + } + + CFDataRef peeraddr = CFSocketCopyPeerAddress(theSocket); + if(peeraddr == NULL) + { + NSLog(@"AsyncSocket couldn't determine IP version of socket"); + + CFRelease(theSocket); + + if (errPtr) *errPtr = [self getSocketError]; + return NO; + } + struct sockaddr *sa = (struct sockaddr *)CFDataGetBytePtr(peeraddr); + + if(sa->sa_family == AF_INET) + { + theSocket4 = theSocket; + theNativeSocket4 = native; + } + else + { + theSocket6 = theSocket; + theNativeSocket6 = native; + } + + CFRelease(peeraddr); + + return YES; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Disconnect Implementation +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Sends error message and disconnects +- (void)closeWithError:(NSError *)err +{ + theFlags |= kClosingWithError; + + if (theFlags & kDidStartDelegate) + { + // Try to salvage what data we can. + [self recoverUnreadData]; + + // Let the delegate know, so it can try to recover if it likes. + if ([theDelegate respondsToSelector:@selector(onSocket:willDisconnectWithError:)]) + { + [theDelegate onSocket:self willDisconnectWithError:err]; + } + } + [self close]; +} + +// Prepare partially read data for recovery. +- (void)recoverUnreadData +{ + if(theCurrentRead != nil) + { + // We never finished the current read. + // Check to see if it's a normal read packet (not AsyncSpecialPacket) and if it had read anything yet. + + if(([theCurrentRead isKindOfClass:[AsyncReadPacket class]]) && (theCurrentRead->bytesDone > 0)) + { + // We need to move its data into the front of the partial read buffer. + + void *buffer = [theCurrentRead->buffer mutableBytes] + theCurrentRead->startOffset; + + [partialReadBuffer replaceBytesInRange:NSMakeRange(0, 0) + withBytes:buffer + length:theCurrentRead->bytesDone]; + } + } + + [self emptyQueues]; +} + +- (void)emptyQueues +{ + if (theCurrentRead != nil) [self endCurrentRead]; + if (theCurrentWrite != nil) [self endCurrentWrite]; + + [theReadQueue removeAllObjects]; + [theWriteQueue removeAllObjects]; + + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(maybeDequeueRead) object:nil]; + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(maybeDequeueWrite) object:nil]; + + theFlags &= ~kDequeueReadScheduled; + theFlags &= ~kDequeueWriteScheduled; +} + +/** + * Disconnects. This is called for both error and clean disconnections. +**/ +- (void)close +{ + // Empty queues + [self emptyQueues]; + + // Clear partialReadBuffer (pre-buffer and also unreadData buffer in case of error) + [partialReadBuffer replaceBytesInRange:NSMakeRange(0, [partialReadBuffer length]) withBytes:NULL length:0]; + + [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(disconnect) object:nil]; + + // Stop the connection attempt timeout timer + if (theConnectTimer != nil) + { + [self endConnectTimeout]; + } + + // Close streams. + if (theReadStream != NULL) + { + [self runLoopUnscheduleReadStream]; + CFReadStreamClose(theReadStream); + CFRelease(theReadStream); + theReadStream = NULL; + } + if (theWriteStream != NULL) + { + [self runLoopUnscheduleWriteStream]; + CFWriteStreamClose(theWriteStream); + CFRelease(theWriteStream); + theWriteStream = NULL; + } + + // Close sockets. + if (theSocket4 != NULL) + { + CFSocketInvalidate (theSocket4); + CFRelease (theSocket4); + theSocket4 = NULL; + } + if (theSocket6 != NULL) + { + CFSocketInvalidate (theSocket6); + CFRelease (theSocket6); + theSocket6 = NULL; + } + + // Closing the streams or sockets resulted in closing the underlying native socket + theNativeSocket4 = 0; + theNativeSocket6 = 0; + + // Remove run loop sources + if (theSource4 != NULL) + { + [self runLoopRemoveSource:theSource4]; + CFRelease (theSource4); + theSource4 = NULL; + } + if (theSource6 != NULL) + { + [self runLoopRemoveSource:theSource6]; + CFRelease (theSource6); + theSource6 = NULL; + } + theRunLoop = NULL; + + // If the client has passed the connect/accept method, then the connection has at least begun. + // Notify delegate that it is now ending. + BOOL shouldCallDelegate = (theFlags & kDidStartDelegate); + + // Clear all flags (except the pre-buffering flag, which should remain as is) + theFlags &= kEnablePreBuffering; + + if (shouldCallDelegate) + { + if ([theDelegate respondsToSelector: @selector(onSocketDidDisconnect:)]) + { + [theDelegate onSocketDidDisconnect:self]; + } + } + + // Do not access any instance variables after calling onSocketDidDisconnect. + // This gives the delegate freedom to release us without returning here and crashing. +} + +/** + * Disconnects immediately. Any pending reads or writes are dropped. +**/ +- (void)disconnect +{ + [self close]; +} + +/** + * Diconnects after all pending reads have completed. +**/ +- (void)disconnectAfterReading +{ + theFlags |= (kForbidReadsWrites | kDisconnectAfterReads); + + [self maybeScheduleDisconnect]; +} + +/** + * Disconnects after all pending writes have completed. +**/ +- (void)disconnectAfterWriting +{ + theFlags |= (kForbidReadsWrites | kDisconnectAfterWrites); + + [self maybeScheduleDisconnect]; +} + +/** + * Disconnects after all pending reads and writes have completed. +**/ +- (void)disconnectAfterReadingAndWriting +{ + theFlags |= (kForbidReadsWrites | kDisconnectAfterReads | kDisconnectAfterWrites); + + [self maybeScheduleDisconnect]; +} + +/** + * Schedules a call to disconnect if possible. + * That is, if all writes have completed, and we're set to disconnect after writing, + * or if all reads have completed, and we're set to disconnect after reading. +**/ +- (void)maybeScheduleDisconnect +{ + BOOL shouldDisconnect = NO; + + if(theFlags & kDisconnectAfterReads) + { + if(([theReadQueue count] == 0) && (theCurrentRead == nil)) + { + if(theFlags & kDisconnectAfterWrites) + { + if(([theWriteQueue count] == 0) && (theCurrentWrite == nil)) + { + shouldDisconnect = YES; + } + } + else + { + shouldDisconnect = YES; + } + } + } + else if(theFlags & kDisconnectAfterWrites) + { + if(([theWriteQueue count] == 0) && (theCurrentWrite == nil)) + { + shouldDisconnect = YES; + } + } + + if(shouldDisconnect) + { + [self performSelector:@selector(disconnect) withObject:nil afterDelay:0 inModes:theRunLoopModes]; + } +} + +/** + * In the event of an error, this method may be called during onSocket:willDisconnectWithError: to read + * any data that's left on the socket. +**/ +- (NSData *)unreadData +{ + // Ensure this method will only return data in the event of an error + if (!(theFlags & kClosingWithError)) return nil; + + if (theReadStream == NULL) return nil; + + NSUInteger totalBytesRead = [partialReadBuffer length]; + + BOOL error = NO; + while (!error && CFReadStreamHasBytesAvailable(theReadStream)) + { + if (totalBytesRead == [partialReadBuffer length]) + { + [partialReadBuffer increaseLengthBy:READALL_CHUNKSIZE]; + } + + // Number of bytes to read is space left in packet buffer. + NSUInteger bytesToRead = [partialReadBuffer length] - totalBytesRead; + + // Read data into packet buffer + UInt8 *packetbuf = (UInt8 *)( [partialReadBuffer mutableBytes] + totalBytesRead ); + + CFIndex result = CFReadStreamRead(theReadStream, packetbuf, bytesToRead); + + // Check results + if (result < 0) + { + error = YES; + } + else + { + CFIndex bytesRead = result; + + totalBytesRead += bytesRead; + } + } + + [partialReadBuffer setLength:totalBytesRead]; + + return partialReadBuffer; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Errors +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Returns a standard error object for the current errno value. + * Errno is used for low-level BSD socket errors. +**/ +- (NSError *)getErrnoError +{ + NSString *errorMsg = [NSString stringWithUTF8String:strerror(errno)]; + NSDictionary *userInfo = [NSDictionary dictionaryWithObject:errorMsg forKey:NSLocalizedDescriptionKey]; + + return [NSError errorWithDomain:NSPOSIXErrorDomain code:errno userInfo:userInfo]; +} + +/** + * Returns a standard error message for a CFSocket error. + * Unfortunately, CFSocket offers no feedback on its errors. +**/ +- (NSError *)getSocketError +{ + NSString *errMsg = NSLocalizedStringWithDefaultValue(@"AsyncSocketCFSocketError", + @"AsyncSocket", [NSBundle mainBundle], + @"General CFSocket error", nil); + + NSDictionary *info = [NSDictionary dictionaryWithObject:errMsg forKey:NSLocalizedDescriptionKey]; + + return [NSError errorWithDomain:AsyncSocketErrorDomain code:AsyncSocketCFSocketError userInfo:info]; +} + +- (NSError *)getStreamError +{ + CFStreamError err; + if (theReadStream != NULL) + { + err = CFReadStreamGetError (theReadStream); + if (err.error != 0) return [self errorFromCFStreamError: err]; + } + + if (theWriteStream != NULL) + { + err = CFWriteStreamGetError (theWriteStream); + if (err.error != 0) return [self errorFromCFStreamError: err]; + } + + return nil; +} + +/** + * Returns a standard AsyncSocket abort error. +**/ +- (NSError *)getAbortError +{ + NSString *errMsg = NSLocalizedStringWithDefaultValue(@"AsyncSocketCanceledError", + @"AsyncSocket", [NSBundle mainBundle], + @"Connection canceled", nil); + + NSDictionary *info = [NSDictionary dictionaryWithObject:errMsg forKey:NSLocalizedDescriptionKey]; + + return [NSError errorWithDomain:AsyncSocketErrorDomain code:AsyncSocketCanceledError userInfo:info]; +} + +/** + * Returns a standard AsyncSocket connect timeout error. +**/ +- (NSError *)getConnectTimeoutError +{ + NSString *errMsg = NSLocalizedStringWithDefaultValue(@"AsyncSocketConnectTimeoutError", + @"AsyncSocket", [NSBundle mainBundle], + @"Attempt to connect to host timed out", nil); + + NSDictionary *info = [NSDictionary dictionaryWithObject:errMsg forKey:NSLocalizedDescriptionKey]; + + return [NSError errorWithDomain:AsyncSocketErrorDomain code:AsyncSocketConnectTimeoutError userInfo:info]; +} + +/** + * Returns a standard AsyncSocket maxed out error. +**/ +- (NSError *)getReadMaxedOutError +{ + NSString *errMsg = NSLocalizedStringWithDefaultValue(@"AsyncSocketReadMaxedOutError", + @"AsyncSocket", [NSBundle mainBundle], + @"Read operation reached set maximum length", nil); + + NSDictionary *info = [NSDictionary dictionaryWithObject:errMsg forKey:NSLocalizedDescriptionKey]; + + return [NSError errorWithDomain:AsyncSocketErrorDomain code:AsyncSocketReadMaxedOutError userInfo:info]; +} + +/** + * Returns a standard AsyncSocket read timeout error. +**/ +- (NSError *)getReadTimeoutError +{ + NSString *errMsg = NSLocalizedStringWithDefaultValue(@"AsyncSocketReadTimeoutError", + @"AsyncSocket", [NSBundle mainBundle], + @"Read operation timed out", nil); + + NSDictionary *info = [NSDictionary dictionaryWithObject:errMsg forKey:NSLocalizedDescriptionKey]; + + return [NSError errorWithDomain:AsyncSocketErrorDomain code:AsyncSocketReadTimeoutError userInfo:info]; +} + +/** + * Returns a standard AsyncSocket write timeout error. +**/ +- (NSError *)getWriteTimeoutError +{ + NSString *errMsg = NSLocalizedStringWithDefaultValue(@"AsyncSocketWriteTimeoutError", + @"AsyncSocket", [NSBundle mainBundle], + @"Write operation timed out", nil); + + NSDictionary *info = [NSDictionary dictionaryWithObject:errMsg forKey:NSLocalizedDescriptionKey]; + + return [NSError errorWithDomain:AsyncSocketErrorDomain code:AsyncSocketWriteTimeoutError userInfo:info]; +} + +- (NSError *)errorFromCFStreamError:(CFStreamError)err +{ + if (err.domain == 0 && err.error == 0) return nil; + + // Can't use switch; these constants aren't int literals. + NSString *domain = @"CFStreamError (unlisted domain)"; + NSString *message = nil; + + if(err.domain == kCFStreamErrorDomainPOSIX) { + domain = NSPOSIXErrorDomain; + } + else if(err.domain == kCFStreamErrorDomainMacOSStatus) { + domain = NSOSStatusErrorDomain; + } + else if(err.domain == kCFStreamErrorDomainMach) { + domain = NSMachErrorDomain; + } + else if(err.domain == kCFStreamErrorDomainNetDB) + { + domain = @"kCFStreamErrorDomainNetDB"; + message = [NSString stringWithCString:gai_strerror(err.error) encoding:NSASCIIStringEncoding]; + } + else if(err.domain == kCFStreamErrorDomainNetServices) { + domain = @"kCFStreamErrorDomainNetServices"; + } + else if(err.domain == kCFStreamErrorDomainSOCKS) { + domain = @"kCFStreamErrorDomainSOCKS"; + } + else if(err.domain == kCFStreamErrorDomainSystemConfiguration) { + domain = @"kCFStreamErrorDomainSystemConfiguration"; + } + else if(err.domain == kCFStreamErrorDomainSSL) { + domain = @"kCFStreamErrorDomainSSL"; + } + + NSDictionary *info = nil; + if(message != nil) + { + info = [NSDictionary dictionaryWithObject:message forKey:NSLocalizedDescriptionKey]; + } + return [NSError errorWithDomain:domain code:err.error userInfo:info]; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Diagnostics +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (BOOL)isDisconnected +{ + if (theNativeSocket4 > 0) return NO; + if (theNativeSocket6 > 0) return NO; + + if (theSocket4) return NO; + if (theSocket6) return NO; + + if (theReadStream) return NO; + if (theWriteStream) return NO; + + return YES; +} + +- (BOOL)isConnected +{ + return [self areStreamsConnected]; +} + +- (NSString *)connectedHost +{ + if(theSocket4) + return [self connectedHostFromCFSocket4:theSocket4]; + if(theSocket6) + return [self connectedHostFromCFSocket6:theSocket6]; + + if(theNativeSocket4 > 0) + return [self connectedHostFromNativeSocket4:theNativeSocket4]; + if(theNativeSocket6 > 0) + return [self connectedHostFromNativeSocket6:theNativeSocket6]; + + return nil; +} + +- (UInt16)connectedPort +{ + if(theSocket4) + return [self connectedPortFromCFSocket4:theSocket4]; + if(theSocket6) + return [self connectedPortFromCFSocket6:theSocket6]; + + if(theNativeSocket4 > 0) + return [self connectedPortFromNativeSocket4:theNativeSocket4]; + if(theNativeSocket6 > 0) + return [self connectedPortFromNativeSocket6:theNativeSocket6]; + + return 0; +} + +- (NSString *)localHost +{ + if(theSocket4) + return [self localHostFromCFSocket4:theSocket4]; + if(theSocket6) + return [self localHostFromCFSocket6:theSocket6]; + + if(theNativeSocket4 > 0) + return [self localHostFromNativeSocket4:theNativeSocket4]; + if(theNativeSocket6 > 0) + return [self localHostFromNativeSocket6:theNativeSocket6]; + + return nil; +} + +- (UInt16)localPort +{ + if(theSocket4) + return [self localPortFromCFSocket4:theSocket4]; + if(theSocket6) + return [self localPortFromCFSocket6:theSocket6]; + + if(theNativeSocket4 > 0) + return [self localPortFromNativeSocket4:theNativeSocket4]; + if(theNativeSocket6 > 0) + return [self localPortFromNativeSocket6:theNativeSocket6]; + + return 0; +} + +- (NSString *)connectedHost4 +{ + if(theSocket4) + return [self connectedHostFromCFSocket4:theSocket4]; + if(theNativeSocket4 > 0) + return [self connectedHostFromNativeSocket4:theNativeSocket4]; + + return nil; +} + +- (NSString *)connectedHost6 +{ + if(theSocket6) + return [self connectedHostFromCFSocket6:theSocket6]; + if(theNativeSocket6 > 0) + return [self connectedHostFromNativeSocket6:theNativeSocket6]; + + return nil; +} + +- (UInt16)connectedPort4 +{ + if(theSocket4) + return [self connectedPortFromCFSocket4:theSocket4]; + if(theNativeSocket4 > 0) + return [self connectedPortFromNativeSocket4:theNativeSocket4]; + + return 0; +} + +- (UInt16)connectedPort6 +{ + if(theSocket6) + return [self connectedPortFromCFSocket6:theSocket6]; + if(theNativeSocket6 > 0) + return [self connectedPortFromNativeSocket6:theNativeSocket6]; + + return 0; +} + +- (NSString *)localHost4 +{ + if(theSocket4) + return [self localHostFromCFSocket4:theSocket4]; + if(theNativeSocket4 > 0) + return [self localHostFromNativeSocket4:theNativeSocket4]; + + return nil; +} + +- (NSString *)localHost6 +{ + if(theSocket6) + return [self localHostFromCFSocket6:theSocket6]; + if(theNativeSocket6 > 0) + return [self localHostFromNativeSocket6:theNativeSocket6]; + + return nil; +} + +- (UInt16)localPort4 +{ + if(theSocket4) + return [self localPortFromCFSocket4:theSocket4]; + if(theNativeSocket4 > 0) + return [self localPortFromNativeSocket4:theNativeSocket4]; + + return 0; +} + +- (UInt16)localPort6 +{ + if(theSocket6) + return [self localPortFromCFSocket6:theSocket6]; + if(theNativeSocket6 > 0) + return [self localPortFromNativeSocket6:theNativeSocket6]; + + return 0; +} + +- (NSString *)connectedHostFromNativeSocket4:(CFSocketNativeHandle)theNativeSocket +{ + struct sockaddr_in sockaddr4; + socklen_t sockaddr4len = sizeof(sockaddr4); + + if(getpeername(theNativeSocket, (struct sockaddr *)&sockaddr4, &sockaddr4len) < 0) + { + return nil; + } + return [self hostFromAddress4:&sockaddr4]; +} + +- (NSString *)connectedHostFromNativeSocket6:(CFSocketNativeHandle)theNativeSocket +{ + struct sockaddr_in6 sockaddr6; + socklen_t sockaddr6len = sizeof(sockaddr6); + + if(getpeername(theNativeSocket, (struct sockaddr *)&sockaddr6, &sockaddr6len) < 0) + { + return nil; + } + return [self hostFromAddress6:&sockaddr6]; +} + +- (NSString *)connectedHostFromCFSocket4:(CFSocketRef)theSocket +{ + CFDataRef peeraddr; + NSString *peerstr = nil; + + if((peeraddr = CFSocketCopyPeerAddress(theSocket))) + { + struct sockaddr_in *pSockAddr = (struct sockaddr_in *)CFDataGetBytePtr(peeraddr); + + peerstr = [self hostFromAddress4:pSockAddr]; + CFRelease (peeraddr); + } + + return peerstr; +} + +- (NSString *)connectedHostFromCFSocket6:(CFSocketRef)theSocket +{ + CFDataRef peeraddr; + NSString *peerstr = nil; + + if((peeraddr = CFSocketCopyPeerAddress(theSocket))) + { + struct sockaddr_in6 *pSockAddr = (struct sockaddr_in6 *)CFDataGetBytePtr(peeraddr); + + peerstr = [self hostFromAddress6:pSockAddr]; + CFRelease (peeraddr); + } + + return peerstr; +} + +- (UInt16)connectedPortFromNativeSocket4:(CFSocketNativeHandle)theNativeSocket +{ + struct sockaddr_in sockaddr4; + socklen_t sockaddr4len = sizeof(sockaddr4); + + if(getpeername(theNativeSocket, (struct sockaddr *)&sockaddr4, &sockaddr4len) < 0) + { + return 0; + } + return [self portFromAddress4:&sockaddr4]; +} + +- (UInt16)connectedPortFromNativeSocket6:(CFSocketNativeHandle)theNativeSocket +{ + struct sockaddr_in6 sockaddr6; + socklen_t sockaddr6len = sizeof(sockaddr6); + + if(getpeername(theNativeSocket, (struct sockaddr *)&sockaddr6, &sockaddr6len) < 0) + { + return 0; + } + return [self portFromAddress6:&sockaddr6]; +} + +- (UInt16)connectedPortFromCFSocket4:(CFSocketRef)theSocket +{ + CFDataRef peeraddr; + UInt16 peerport = 0; + + if((peeraddr = CFSocketCopyPeerAddress(theSocket))) + { + struct sockaddr_in *pSockAddr = (struct sockaddr_in *)CFDataGetBytePtr(peeraddr); + + peerport = [self portFromAddress4:pSockAddr]; + CFRelease (peeraddr); + } + + return peerport; +} + +- (UInt16)connectedPortFromCFSocket6:(CFSocketRef)theSocket +{ + CFDataRef peeraddr; + UInt16 peerport = 0; + + if((peeraddr = CFSocketCopyPeerAddress(theSocket))) + { + struct sockaddr_in6 *pSockAddr = (struct sockaddr_in6 *)CFDataGetBytePtr(peeraddr); + + peerport = [self portFromAddress6:pSockAddr]; + CFRelease (peeraddr); + } + + return peerport; +} + +- (NSString *)localHostFromNativeSocket4:(CFSocketNativeHandle)theNativeSocket +{ + struct sockaddr_in sockaddr4; + socklen_t sockaddr4len = sizeof(sockaddr4); + + if(getsockname(theNativeSocket, (struct sockaddr *)&sockaddr4, &sockaddr4len) < 0) + { + return nil; + } + return [self hostFromAddress4:&sockaddr4]; +} + +- (NSString *)localHostFromNativeSocket6:(CFSocketNativeHandle)theNativeSocket +{ + struct sockaddr_in6 sockaddr6; + socklen_t sockaddr6len = sizeof(sockaddr6); + + if(getsockname(theNativeSocket, (struct sockaddr *)&sockaddr6, &sockaddr6len) < 0) + { + return nil; + } + return [self hostFromAddress6:&sockaddr6]; +} + +- (NSString *)localHostFromCFSocket4:(CFSocketRef)theSocket +{ + CFDataRef selfaddr; + NSString *selfstr = nil; + + if((selfaddr = CFSocketCopyAddress(theSocket))) + { + struct sockaddr_in *pSockAddr = (struct sockaddr_in *)CFDataGetBytePtr(selfaddr); + + selfstr = [self hostFromAddress4:pSockAddr]; + CFRelease (selfaddr); + } + + return selfstr; +} + +- (NSString *)localHostFromCFSocket6:(CFSocketRef)theSocket +{ + CFDataRef selfaddr; + NSString *selfstr = nil; + + if((selfaddr = CFSocketCopyAddress(theSocket))) + { + struct sockaddr_in6 *pSockAddr = (struct sockaddr_in6 *)CFDataGetBytePtr(selfaddr); + + selfstr = [self hostFromAddress6:pSockAddr]; + CFRelease (selfaddr); + } + + return selfstr; +} + +- (UInt16)localPortFromNativeSocket4:(CFSocketNativeHandle)theNativeSocket +{ + struct sockaddr_in sockaddr4; + socklen_t sockaddr4len = sizeof(sockaddr4); + + if(getsockname(theNativeSocket, (struct sockaddr *)&sockaddr4, &sockaddr4len) < 0) + { + return 0; + } + return [self portFromAddress4:&sockaddr4]; +} + +- (UInt16)localPortFromNativeSocket6:(CFSocketNativeHandle)theNativeSocket +{ + struct sockaddr_in6 sockaddr6; + socklen_t sockaddr6len = sizeof(sockaddr6); + + if(getsockname(theNativeSocket, (struct sockaddr *)&sockaddr6, &sockaddr6len) < 0) + { + return 0; + } + return [self portFromAddress6:&sockaddr6]; +} + +- (UInt16)localPortFromCFSocket4:(CFSocketRef)theSocket +{ + CFDataRef selfaddr; + UInt16 selfport = 0; + + if ((selfaddr = CFSocketCopyAddress(theSocket))) + { + struct sockaddr_in *pSockAddr = (struct sockaddr_in *)CFDataGetBytePtr(selfaddr); + + selfport = [self portFromAddress4:pSockAddr]; + CFRelease (selfaddr); + } + + return selfport; +} + +- (UInt16)localPortFromCFSocket6:(CFSocketRef)theSocket +{ + CFDataRef selfaddr; + UInt16 selfport = 0; + + if ((selfaddr = CFSocketCopyAddress(theSocket))) + { + struct sockaddr_in6 *pSockAddr = (struct sockaddr_in6 *)CFDataGetBytePtr(selfaddr); + + selfport = [self portFromAddress6:pSockAddr]; + CFRelease (selfaddr); + } + + return selfport; +} + +- (NSString *)hostFromAddress4:(struct sockaddr_in *)pSockaddr4 +{ + char addrBuf[INET_ADDRSTRLEN]; + + if(inet_ntop(AF_INET, &pSockaddr4->sin_addr, addrBuf, (socklen_t)sizeof(addrBuf)) == NULL) + { + [NSException raise:NSInternalInconsistencyException format:@"Cannot convert IPv4 address to string."]; + } + + return [NSString stringWithCString:addrBuf encoding:NSASCIIStringEncoding]; +} + +- (NSString *)hostFromAddress6:(struct sockaddr_in6 *)pSockaddr6 +{ + char addrBuf[INET6_ADDRSTRLEN]; + + if(inet_ntop(AF_INET6, &pSockaddr6->sin6_addr, addrBuf, (socklen_t)sizeof(addrBuf)) == NULL) + { + [NSException raise:NSInternalInconsistencyException format:@"Cannot convert IPv6 address to string."]; + } + + return [NSString stringWithCString:addrBuf encoding:NSASCIIStringEncoding]; +} + +- (UInt16)portFromAddress4:(struct sockaddr_in *)pSockaddr4 +{ + return ntohs(pSockaddr4->sin_port); +} + +- (UInt16)portFromAddress6:(struct sockaddr_in6 *)pSockaddr6 +{ + return ntohs(pSockaddr6->sin6_port); +} + +- (NSData *)connectedAddress +{ + // Extract address from CFSocket + + CFSocketRef theSocket; + + if (theSocket4) + theSocket = theSocket4; + else + theSocket = theSocket6; + + if (theSocket) + { + CFDataRef peeraddr = CFSocketCopyPeerAddress(theSocket); + + if (peeraddr == NULL) return nil; + + #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 + NSData *result = [NSData dataWithBytes:CFDataGetBytePtr(peeraddr) length:CFDataGetLength(peeraddr)]; + CFRelease(peeraddr); + return result; + #else + return [(NSData *)NSMakeCollectable(peeraddr) autorelease]; + #endif + } + + // Extract address from CFSocketNativeHandle + + socklen_t sockaddrlen; + CFSocketNativeHandle theNativeSocket = 0; + + if (theNativeSocket4 > 0) + { + theNativeSocket = theNativeSocket4; + sockaddrlen = sizeof(struct sockaddr_in); + } + else + { + theNativeSocket = theNativeSocket6; + sockaddrlen = sizeof(struct sockaddr_in6); + } + + NSData *result = nil; + void *sockaddr = malloc(sockaddrlen); + + if(getpeername(theNativeSocket, (struct sockaddr *)sockaddr, &sockaddrlen) >= 0) + { + result = [NSData dataWithBytesNoCopy:sockaddr length:sockaddrlen freeWhenDone:YES]; + } + else + { + free(sockaddr); + } + + return result; +} + +- (NSData *)localAddress +{ + // Extract address from CFSocket + + CFSocketRef theSocket; + + if (theSocket4) + theSocket = theSocket4; + else + theSocket = theSocket6; + + if (theSocket) + { + CFDataRef selfaddr = CFSocketCopyAddress(theSocket); + + if (selfaddr == NULL) return nil; + + #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 + NSData *result = [NSData dataWithBytes:CFDataGetBytePtr(selfaddr) length:CFDataGetLength(selfaddr)]; + CFRelease(selfaddr); + return result; + #else + return [(NSData *)NSMakeCollectable(selfaddr) autorelease]; + #endif + } + + // Extract address from CFSocketNativeHandle + + socklen_t sockaddrlen; + CFSocketNativeHandle theNativeSocket = 0; + + if (theNativeSocket4 > 0) + { + theNativeSocket = theNativeSocket4; + sockaddrlen = sizeof(struct sockaddr_in); + } + else + { + theNativeSocket = theNativeSocket6; + sockaddrlen = sizeof(struct sockaddr_in6); + } + + NSData *result = nil; + void *sockaddr = malloc(sockaddrlen); + + if(getsockname(theNativeSocket, (struct sockaddr *)sockaddr, &sockaddrlen) >= 0) + { + result = [NSData dataWithBytesNoCopy:sockaddr length:sockaddrlen freeWhenDone:YES]; + } + else + { + free(sockaddr); + } + + return result; +} + +- (BOOL)isIPv4 +{ + return (theNativeSocket4 > 0 || theSocket4 != NULL); +} + +- (BOOL)isIPv6 +{ + return (theNativeSocket6 > 0 || theSocket6 != NULL); +} + +- (BOOL)areStreamsConnected +{ + CFStreamStatus s; + + if (theReadStream != NULL) + { + s = CFReadStreamGetStatus(theReadStream); + if ( !(s == kCFStreamStatusOpen || s == kCFStreamStatusReading || s == kCFStreamStatusError) ) + return NO; + } + else return NO; + + if (theWriteStream != NULL) + { + s = CFWriteStreamGetStatus(theWriteStream); + if ( !(s == kCFStreamStatusOpen || s == kCFStreamStatusWriting || s == kCFStreamStatusError) ) + return NO; + } + else return NO; + + return YES; +} + +- (NSString *)description +{ + static const char *statstr[] = {"not open","opening","open","reading","writing","at end","closed","has error"}; + CFStreamStatus rs = (theReadStream != NULL) ? CFReadStreamGetStatus(theReadStream) : 0; + CFStreamStatus ws = (theWriteStream != NULL) ? CFWriteStreamGetStatus(theWriteStream) : 0; + + NSString *peerstr, *selfstr; + + BOOL is4 = [self isIPv4]; + BOOL is6 = [self isIPv6]; + + if (is4 || is6) + { + if (is4 && is6) + { + peerstr = [NSString stringWithFormat: @"%@/%@ %u", + [self connectedHost4], + [self connectedHost6], + [self connectedPort]]; + } + else if (is4) + { + peerstr = [NSString stringWithFormat: @"%@ %u", + [self connectedHost4], + [self connectedPort4]]; + } + else + { + peerstr = [NSString stringWithFormat: @"%@ %u", + [self connectedHost6], + [self connectedPort6]]; + } + } + else peerstr = @"nowhere"; + + if (is4 || is6) + { + if (is4 && is6) + { + selfstr = [NSString stringWithFormat: @"%@/%@ %u", + [self localHost4], + [self localHost6], + [self localPort]]; + } + else if (is4) + { + selfstr = [NSString stringWithFormat: @"%@ %u", + [self localHost4], + [self localPort4]]; + } + else + { + selfstr = [NSString stringWithFormat: @"%@ %u", + [self localHost6], + [self localPort6]]; + } + } + else selfstr = @"nowhere"; + + NSMutableString *ms = [[NSMutableString alloc] initWithCapacity:150]; + + [ms appendString:[NSString stringWithFormat:@"readLength > 0) + percentDone = (float)theCurrentRead->bytesDone / (float)theCurrentRead->readLength * 100.0F; + else + percentDone = 100.0F; + + [ms appendString: [NSString stringWithFormat:@"currently read %u bytes (%d%% done), ", + (unsigned int)[theCurrentRead->buffer length], + theCurrentRead->bytesDone ? percentDone : 0]]; + } + + if (theCurrentWrite == nil) + [ms appendString: @"no current write, "]; + else + { + int percentDone = (float)theCurrentWrite->bytesDone / (float)[theCurrentWrite->buffer length] * 100.0F; + + [ms appendString: [NSString stringWithFormat:@"currently written %u (%d%%), ", + (unsigned int)[theCurrentWrite->buffer length], + theCurrentWrite->bytesDone ? percentDone : 0]]; + } + + [ms appendString:[NSString stringWithFormat:@"read stream %p %s, ", theReadStream, statstr[rs]]]; + [ms appendString:[NSString stringWithFormat:@"write stream %p %s", theWriteStream, statstr[ws]]]; + + if(theFlags & kDisconnectAfterReads) + { + if(theFlags & kDisconnectAfterWrites) + [ms appendString: @", will disconnect after reads & writes"]; + else + [ms appendString: @", will disconnect after reads"]; + } + else if(theFlags & kDisconnectAfterWrites) + { + [ms appendString: @", will disconnect after writes"]; + } + + if (![self isConnected]) [ms appendString: @", not connected"]; + + [ms appendString:@">"]; + + return [ms autorelease]; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Reading +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (void)readDataWithTimeout:(NSTimeInterval)timeout tag:(long)tag +{ + [self readDataWithTimeout:timeout buffer:nil bufferOffset:0 maxLength:0 tag:tag]; +} + +- (void)readDataWithTimeout:(NSTimeInterval)timeout + buffer:(NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + tag:(long)tag +{ + [self readDataWithTimeout:timeout buffer:buffer bufferOffset:offset maxLength:0 tag:tag]; +} + +- (void)readDataWithTimeout:(NSTimeInterval)timeout + buffer:(NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + maxLength:(NSUInteger)length + tag:(long)tag +{ + if (offset > [buffer length]) return; + if (theFlags & kForbidReadsWrites) return; + + AsyncReadPacket *packet = [[AsyncReadPacket alloc] initWithData:buffer + startOffset:offset + maxLength:length + timeout:timeout + readLength:0 + terminator:nil + tag:tag]; + [theReadQueue addObject:packet]; + [self scheduleDequeueRead]; + + [packet release]; +} + +- (void)readDataToLength:(NSUInteger)length withTimeout:(NSTimeInterval)timeout tag:(long)tag +{ + [self readDataToLength:length withTimeout:timeout buffer:nil bufferOffset:0 tag:tag]; +} + +- (void)readDataToLength:(NSUInteger)length + withTimeout:(NSTimeInterval)timeout + buffer:(NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + tag:(long)tag +{ + if (length == 0) return; + if (offset > [buffer length]) return; + if (theFlags & kForbidReadsWrites) return; + + AsyncReadPacket *packet = [[AsyncReadPacket alloc] initWithData:buffer + startOffset:offset + maxLength:0 + timeout:timeout + readLength:length + terminator:nil + tag:tag]; + [theReadQueue addObject:packet]; + [self scheduleDequeueRead]; + + [packet release]; +} + +- (void)readDataToData:(NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag +{ + [self readDataToData:data withTimeout:timeout buffer:nil bufferOffset:0 maxLength:0 tag:tag]; +} + +- (void)readDataToData:(NSData *)data + withTimeout:(NSTimeInterval)timeout + buffer:(NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + tag:(long)tag +{ + [self readDataToData:data withTimeout:timeout buffer:buffer bufferOffset:offset maxLength:0 tag:tag]; +} + +- (void)readDataToData:(NSData *)data withTimeout:(NSTimeInterval)timeout maxLength:(NSUInteger)length tag:(long)tag +{ + [self readDataToData:data withTimeout:timeout buffer:nil bufferOffset:0 maxLength:length tag:tag]; +} + +- (void)readDataToData:(NSData *)data + withTimeout:(NSTimeInterval)timeout + buffer:(NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + maxLength:(NSUInteger)length + tag:(long)tag +{ + if (data == nil || [data length] == 0) return; + if (offset > [buffer length]) return; + if (length > 0 && length < [data length]) return; + if (theFlags & kForbidReadsWrites) return; + + AsyncReadPacket *packet = [[AsyncReadPacket alloc] initWithData:buffer + startOffset:offset + maxLength:length + timeout:timeout + readLength:0 + terminator:data + tag:tag]; + [theReadQueue addObject:packet]; + [self scheduleDequeueRead]; + + [packet release]; +} + +/** + * Puts a maybeDequeueRead on the run loop. + * An assumption here is that selectors will be performed consecutively within their priority. +**/ +- (void)scheduleDequeueRead +{ + if((theFlags & kDequeueReadScheduled) == 0) + { + theFlags |= kDequeueReadScheduled; + [self performSelector:@selector(maybeDequeueRead) withObject:nil afterDelay:0 inModes:theRunLoopModes]; + } +} + +/** + * This method starts a new read, if needed. + * It is called when a user requests a read, + * or when a stream opens that may have requested reads sitting in the queue, etc. +**/ +- (void)maybeDequeueRead +{ + // Unset the flag indicating a call to this method is scheduled + theFlags &= ~kDequeueReadScheduled; + + // If we're not currently processing a read AND we have an available read stream + if((theCurrentRead == nil) && (theReadStream != NULL)) + { + if([theReadQueue count] > 0) + { + // Dequeue the next object in the write queue + theCurrentRead = [[theReadQueue objectAtIndex:0] retain]; + [theReadQueue removeObjectAtIndex:0]; + + if([theCurrentRead isKindOfClass:[AsyncSpecialPacket class]]) + { + // Attempt to start TLS + theFlags |= kStartingReadTLS; + + // This method won't do anything unless both kStartingReadTLS and kStartingWriteTLS are set + [self maybeStartTLS]; + } + else + { + // Start time-out timer + if(theCurrentRead->timeout >= 0.0) + { + theReadTimer = [NSTimer timerWithTimeInterval:theCurrentRead->timeout + target:self + selector:@selector(doReadTimeout:) + userInfo:nil + repeats:NO]; + [self runLoopAddTimer:theReadTimer]; + } + + // Immediately read, if possible + [self doBytesAvailable]; + } + } + else if(theFlags & kDisconnectAfterReads) + { + if(theFlags & kDisconnectAfterWrites) + { + if(([theWriteQueue count] == 0) && (theCurrentWrite == nil)) + { + [self disconnect]; + } + } + else + { + [self disconnect]; + } + } + } +} + +/** + * Call this method in doBytesAvailable instead of CFReadStreamHasBytesAvailable(). + * This method supports pre-buffering properly as well as the kSocketHasBytesAvailable flag. +**/ +- (BOOL)hasBytesAvailable +{ + if ((theFlags & kSocketHasBytesAvailable) || ([partialReadBuffer length] > 0)) + { + return YES; + } + else + { + return CFReadStreamHasBytesAvailable(theReadStream); + } +} + +/** + * Call this method in doBytesAvailable instead of CFReadStreamRead(). + * This method support pre-buffering properly. +**/ +- (CFIndex)readIntoBuffer:(void *)buffer maxLength:(NSUInteger)length +{ + if([partialReadBuffer length] > 0) + { + // Determine the maximum amount of data to read + NSUInteger bytesToRead = MIN(length, [partialReadBuffer length]); + + // Copy the bytes from the partial read buffer + memcpy(buffer, [partialReadBuffer bytes], (size_t)bytesToRead); + + // Remove the copied bytes from the partial read buffer + [partialReadBuffer replaceBytesInRange:NSMakeRange(0, bytesToRead) withBytes:NULL length:0]; + + return (CFIndex)bytesToRead; + } + else + { + // Unset the "has-bytes-available" flag + theFlags &= ~kSocketHasBytesAvailable; + + return CFReadStreamRead(theReadStream, (UInt8 *)buffer, length); + } +} + +/** + * This method is called when a new read is taken from the read queue or when new data becomes available on the stream. +**/ +- (void)doBytesAvailable +{ + // If data is available on the stream, but there is no read request, then we don't need to process the data yet. + // Also, if there is a read request but no read stream setup, we can't process any data yet. + if((theCurrentRead == nil) || (theReadStream == NULL)) + { + return; + } + + // Note: This method is not called if theCurrentRead is an AsyncSpecialPacket (startTLS packet) + + NSUInteger totalBytesRead = 0; + + BOOL done = NO; + BOOL socketError = NO; + BOOL maxoutError = NO; + + while(!done && !socketError && !maxoutError && [self hasBytesAvailable]) + { + BOOL didPreBuffer = NO; + BOOL didReadFromPreBuffer = NO; + + // There are 3 types of read packets: + // + // 1) Read all available data. + // 2) Read a specific length of data. + // 3) Read up to a particular terminator. + + NSUInteger bytesToRead; + + if (theCurrentRead->term != nil) + { + // Read type #3 - read up to a terminator + // + // If pre-buffering is enabled we'll read a chunk and search for the terminator. + // If the terminator is found, overflow data will be placed in the partialReadBuffer for the next read. + // + // If pre-buffering is disabled we'll be forced to read only a few bytes. + // Just enough to ensure we don't go past our term or over our max limit. + // + // If we already have data pre-buffered, we can read directly from it. + + if ([partialReadBuffer length] > 0) + { + didReadFromPreBuffer = YES; + bytesToRead = [theCurrentRead readLengthForTermWithPreBuffer:partialReadBuffer found:&done]; + } + else + { + if (theFlags & kEnablePreBuffering) + { + didPreBuffer = YES; + bytesToRead = [theCurrentRead prebufferReadLengthForTerm]; + } + else + { + bytesToRead = [theCurrentRead readLengthForTerm]; + } + } + } + else + { + // Read type #1 or #2 + + bytesToRead = [theCurrentRead readLengthForNonTerm]; + } + + // Make sure we have enough room in the buffer for our read + + NSUInteger buffSize = [theCurrentRead->buffer length]; + NSUInteger buffSpace = buffSize - theCurrentRead->startOffset - theCurrentRead->bytesDone; + + if (bytesToRead > buffSpace) + { + NSUInteger buffInc = bytesToRead - buffSpace; + + [theCurrentRead->buffer increaseLengthBy:buffInc]; + } + + // Read data into packet buffer + + void *buffer = [theCurrentRead->buffer mutableBytes] + theCurrentRead->startOffset; + void *subBuffer = buffer + theCurrentRead->bytesDone; + + CFIndex result = [self readIntoBuffer:subBuffer maxLength:bytesToRead]; + + // Check results + if (result < 0) + { + socketError = YES; + } + else + { + CFIndex bytesRead = result; + + // Update total amount read for the current read + theCurrentRead->bytesDone += bytesRead; + + // Update total amount read in this method invocation + totalBytesRead += bytesRead; + + + // Is packet done? + if (theCurrentRead->readLength > 0) + { + // Read type #2 - read a specific length of data + + done = (theCurrentRead->bytesDone == theCurrentRead->readLength); + } + else if (theCurrentRead->term != nil) + { + // Read type #3 - read up to a terminator + + if (didPreBuffer) + { + // Search for the terminating sequence within the big chunk we just read. + + NSInteger overflow = [theCurrentRead searchForTermAfterPreBuffering:result]; + + if (overflow > 0) + { + // Copy excess data into partialReadBuffer + void *overflowBuffer = buffer + theCurrentRead->bytesDone - overflow; + + [partialReadBuffer appendBytes:overflowBuffer length:overflow]; + + // Update the bytesDone variable. + theCurrentRead->bytesDone -= overflow; + + // Note: The completeCurrentRead method will trim the buffer for us. + } + + done = (overflow >= 0); + } + else if (didReadFromPreBuffer) + { + // Our 'done' variable was updated via the readLengthForTermWithPreBuffer:found: method + } + else + { + // Search for the terminating sequence at the end of the buffer + + NSUInteger termlen = [theCurrentRead->term length]; + + if(theCurrentRead->bytesDone >= termlen) + { + void *bufferEnd = buffer + (theCurrentRead->bytesDone - termlen); + + const void *seq = [theCurrentRead->term bytes]; + + done = (memcmp (bufferEnd, seq, termlen) == 0); + } + } + + if(!done && theCurrentRead->maxLength > 0) + { + // We're not done and there's a set maxLength. + // Have we reached that maxLength yet? + + if(theCurrentRead->bytesDone >= theCurrentRead->maxLength) + { + maxoutError = YES; + } + } + } + else + { + // Read type #1 - read all available data + // + // We're done when: + // - we reach maxLength (if there is a max) + // - all readable is read (see below) + + if (theCurrentRead->maxLength > 0) + { + done = (theCurrentRead->bytesDone >= theCurrentRead->maxLength); + } + } + } + } + + if (theCurrentRead->readLength <= 0 && theCurrentRead->term == nil) + { + // Read type #1 - read all available data + + if (theCurrentRead->bytesDone > 0) + { + // Ran out of bytes, so the "read-all-available-data" type packet is done + done = YES; + } + } + + if (done) + { + [self completeCurrentRead]; + if (!socketError) [self scheduleDequeueRead]; + } + else if (totalBytesRead > 0) + { + // We're not done with the readToLength or readToData yet, but we have read in some bytes + if ([theDelegate respondsToSelector:@selector(onSocket:didReadPartialDataOfLength:tag:)]) + { + [theDelegate onSocket:self didReadPartialDataOfLength:totalBytesRead tag:theCurrentRead->tag]; + } + } + + if(socketError) + { + CFStreamError err = CFReadStreamGetError(theReadStream); + [self closeWithError:[self errorFromCFStreamError:err]]; + return; + } + + if(maxoutError) + { + [self closeWithError:[self getReadMaxedOutError]]; + return; + } +} + +// Ends current read and calls delegate. +- (void)completeCurrentRead +{ + NSAssert(theCurrentRead, @"Trying to complete current read when there is no current read."); + + NSData *result; + + if (theCurrentRead->bufferOwner) + { + // We created the buffer on behalf of the user. + // Trim our buffer to be the proper size. + [theCurrentRead->buffer setLength:theCurrentRead->bytesDone]; + + result = theCurrentRead->buffer; + } + else + { + // We did NOT create the buffer. + // The buffer is owned by the caller. + // Only trim the buffer if we had to increase its size. + + if ([theCurrentRead->buffer length] > theCurrentRead->originalBufferLength) + { + NSUInteger readSize = theCurrentRead->startOffset + theCurrentRead->bytesDone; + NSUInteger origSize = theCurrentRead->originalBufferLength; + + NSUInteger buffSize = MAX(readSize, origSize); + + [theCurrentRead->buffer setLength:buffSize]; + } + + void *buffer = [theCurrentRead->buffer mutableBytes] + theCurrentRead->startOffset; + + result = [NSData dataWithBytesNoCopy:buffer length:theCurrentRead->bytesDone freeWhenDone:NO]; + } + + if([theDelegate respondsToSelector:@selector(onSocket:didReadData:withTag:)]) + { + [theDelegate onSocket:self didReadData:result withTag:theCurrentRead->tag]; + } + + // Caller may have disconnected in the above delegate method + if (theCurrentRead != nil) + { + [self endCurrentRead]; + } +} + +// Ends current read. +- (void)endCurrentRead +{ + NSAssert(theCurrentRead, @"Trying to end current read when there is no current read."); + + [theReadTimer invalidate]; + theReadTimer = nil; + + [theCurrentRead release]; + theCurrentRead = nil; +} + +- (void)doReadTimeout:(NSTimer *)timer +{ + NSTimeInterval timeoutExtension = 0.0; + + if([theDelegate respondsToSelector:@selector(onSocket:shouldTimeoutReadWithTag:elapsed:bytesDone:)]) + { + timeoutExtension = [theDelegate onSocket:self shouldTimeoutReadWithTag:theCurrentRead->tag + elapsed:theCurrentRead->timeout + bytesDone:theCurrentRead->bytesDone]; + } + + if(timeoutExtension > 0.0) + { + theCurrentRead->timeout += timeoutExtension; + + theReadTimer = [NSTimer timerWithTimeInterval:timeoutExtension + target:self + selector:@selector(doReadTimeout:) + userInfo:nil + repeats:NO]; + [self runLoopAddTimer:theReadTimer]; + } + else + { + // Do not call endCurrentRead here. + // We must allow the delegate access to any partial read in the unreadData method. + + [self closeWithError:[self getReadTimeoutError]]; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Writing +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (void)writeData:(NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag +{ + if (data == nil || [data length] == 0) return; + if (theFlags & kForbidReadsWrites) return; + + AsyncWritePacket *packet = [[AsyncWritePacket alloc] initWithData:data timeout:timeout tag:tag]; + + [theWriteQueue addObject:packet]; + [self scheduleDequeueWrite]; + + [packet release]; +} + +- (void)scheduleDequeueWrite +{ + if((theFlags & kDequeueWriteScheduled) == 0) + { + theFlags |= kDequeueWriteScheduled; + [self performSelector:@selector(maybeDequeueWrite) withObject:nil afterDelay:0 inModes:theRunLoopModes]; + } +} + +/** + * Conditionally starts a new write. + * + * IF there is not another write in process + * AND there is a write queued + * AND we have a write stream available + * + * This method also handles auto-disconnect post read/write completion. +**/ +- (void)maybeDequeueWrite +{ + // Unset the flag indicating a call to this method is scheduled + theFlags &= ~kDequeueWriteScheduled; + + // If we're not currently processing a write AND we have an available write stream + if((theCurrentWrite == nil) && (theWriteStream != NULL)) + { + if([theWriteQueue count] > 0) + { + // Dequeue the next object in the write queue + theCurrentWrite = [[theWriteQueue objectAtIndex:0] retain]; + [theWriteQueue removeObjectAtIndex:0]; + + if([theCurrentWrite isKindOfClass:[AsyncSpecialPacket class]]) + { + // Attempt to start TLS + theFlags |= kStartingWriteTLS; + + // This method won't do anything unless both kStartingReadTLS and kStartingWriteTLS are set + [self maybeStartTLS]; + } + else + { + // Start time-out timer + if(theCurrentWrite->timeout >= 0.0) + { + theWriteTimer = [NSTimer timerWithTimeInterval:theCurrentWrite->timeout + target:self + selector:@selector(doWriteTimeout:) + userInfo:nil + repeats:NO]; + [self runLoopAddTimer:theWriteTimer]; + } + + // Immediately write, if possible + [self doSendBytes]; + } + } + else if(theFlags & kDisconnectAfterWrites) + { + if(theFlags & kDisconnectAfterReads) + { + if(([theReadQueue count] == 0) && (theCurrentRead == nil)) + { + [self disconnect]; + } + } + else + { + [self disconnect]; + } + } + } +} + +/** + * Call this method in doSendBytes instead of CFWriteStreamCanAcceptBytes(). + * This method supports the kSocketCanAcceptBytes flag. +**/ +- (BOOL)canAcceptBytes +{ + if (theFlags & kSocketCanAcceptBytes) + { + return YES; + } + else + { + return CFWriteStreamCanAcceptBytes(theWriteStream); + } +} + +- (void)doSendBytes +{ + if ((theCurrentWrite == nil) || (theWriteStream == NULL)) + { + return; + } + + // Note: This method is not called if theCurrentWrite is an AsyncSpecialPacket (startTLS packet) + + NSUInteger totalBytesWritten = 0; + + BOOL done = NO; + BOOL error = NO; + + while (!done && !error && [self canAcceptBytes]) + { + // Figure out what to write + NSUInteger bytesRemaining = [theCurrentWrite->buffer length] - theCurrentWrite->bytesDone; + NSUInteger bytesToWrite = (bytesRemaining < WRITE_CHUNKSIZE) ? bytesRemaining : WRITE_CHUNKSIZE; + + UInt8 *writestart = (UInt8 *)([theCurrentWrite->buffer bytes] + theCurrentWrite->bytesDone); + + // Write + CFIndex result = CFWriteStreamWrite(theWriteStream, writestart, bytesToWrite); + + // Unset the "can accept bytes" flag + theFlags &= ~kSocketCanAcceptBytes; + + // Check results + if (result < 0) + { + error = YES; + } + else + { + CFIndex bytesWritten = result; + + // Update total amount read for the current write + theCurrentWrite->bytesDone += bytesWritten; + + // Update total amount written in this method invocation + totalBytesWritten += bytesWritten; + + // Is packet done? + done = ([theCurrentWrite->buffer length] == theCurrentWrite->bytesDone); + } + } + + if(done) + { + [self completeCurrentWrite]; + [self scheduleDequeueWrite]; + } + else if(error) + { + CFStreamError err = CFWriteStreamGetError(theWriteStream); + [self closeWithError:[self errorFromCFStreamError:err]]; + return; + } + else if (totalBytesWritten > 0) + { + // We're not done with the entire write, but we have written some bytes + if ([theDelegate respondsToSelector:@selector(onSocket:didWritePartialDataOfLength:tag:)]) + { + [theDelegate onSocket:self didWritePartialDataOfLength:totalBytesWritten tag:theCurrentWrite->tag]; + } + } +} + +// Ends current write and calls delegate. +- (void)completeCurrentWrite +{ + NSAssert(theCurrentWrite, @"Trying to complete current write when there is no current write."); + + if ([theDelegate respondsToSelector:@selector(onSocket:didWriteDataWithTag:)]) + { + [theDelegate onSocket:self didWriteDataWithTag:theCurrentWrite->tag]; + } + + if (theCurrentWrite != nil) [self endCurrentWrite]; // Caller may have disconnected. +} + +// Ends current write. +- (void)endCurrentWrite +{ + NSAssert(theCurrentWrite, @"Trying to complete current write when there is no current write."); + + [theWriteTimer invalidate]; + theWriteTimer = nil; + + [theCurrentWrite release]; + theCurrentWrite = nil; +} + +- (void)doWriteTimeout:(NSTimer *)timer +{ + NSTimeInterval timeoutExtension = 0.0; + + if([theDelegate respondsToSelector:@selector(onSocket:shouldTimeoutWriteWithTag:elapsed:bytesDone:)]) + { + timeoutExtension = [theDelegate onSocket:self shouldTimeoutWriteWithTag:theCurrentWrite->tag + elapsed:theCurrentWrite->timeout + bytesDone:theCurrentWrite->bytesDone]; + } + + if(timeoutExtension > 0.0) + { + theCurrentWrite->timeout += timeoutExtension; + + theWriteTimer = [NSTimer timerWithTimeInterval:timeoutExtension + target:self + selector:@selector(doWriteTimeout:) + userInfo:nil + repeats:NO]; + [self runLoopAddTimer:theWriteTimer]; + } + else + { + [self closeWithError:[self getWriteTimeoutError]]; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Security +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (void)startTLS:(NSDictionary *)tlsSettings +{ + if(tlsSettings == nil) + { + // Passing nil/NULL to CFReadStreamSetProperty will appear to work the same as passing an empty dictionary, + // but causes problems if we later try to fetch the remote host's certificate. + // + // To be exact, it causes the following to return NULL instead of the normal result: + // CFReadStreamCopyProperty(readStream, kCFStreamPropertySSLPeerCertificates) + // + // So we use an empty dictionary instead, which works perfectly. + + tlsSettings = [NSDictionary dictionary]; + } + + AsyncSpecialPacket *packet = [[AsyncSpecialPacket alloc] initWithTLSSettings:tlsSettings]; + + [theReadQueue addObject:packet]; + [self scheduleDequeueRead]; + + [theWriteQueue addObject:packet]; + [self scheduleDequeueWrite]; + + [packet release]; +} + +- (void)maybeStartTLS +{ + // We can't start TLS until: + // - All queued reads prior to the user calling StartTLS are complete + // - All queued writes prior to the user calling StartTLS are complete + // + // We'll know these conditions are met when both kStartingReadTLS and kStartingWriteTLS are set + + if((theFlags & kStartingReadTLS) && (theFlags & kStartingWriteTLS)) + { + AsyncSpecialPacket *tlsPacket = (AsyncSpecialPacket *)theCurrentRead; + + BOOL didStartOnReadStream = CFReadStreamSetProperty(theReadStream, kCFStreamPropertySSLSettings, + (CFDictionaryRef)tlsPacket->tlsSettings); + BOOL didStartOnWriteStream = CFWriteStreamSetProperty(theWriteStream, kCFStreamPropertySSLSettings, + (CFDictionaryRef)tlsPacket->tlsSettings); + + if(!didStartOnReadStream || !didStartOnWriteStream) + { + [self closeWithError:[self getSocketError]]; + } + } +} + +- (void)onTLSHandshakeSuccessful +{ + if((theFlags & kStartingReadTLS) && (theFlags & kStartingWriteTLS)) + { + theFlags &= ~kStartingReadTLS; + theFlags &= ~kStartingWriteTLS; + + if([theDelegate respondsToSelector:@selector(onSocketDidSecure:)]) + { + [theDelegate onSocketDidSecure:self]; + } + + [self endCurrentRead]; + [self endCurrentWrite]; + + [self scheduleDequeueRead]; + [self scheduleDequeueWrite]; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark CF Callbacks +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (void)doCFSocketCallback:(CFSocketCallBackType)type + forSocket:(CFSocketRef)sock + withAddress:(NSData *)address + withData:(const void *)pData +{ + NSParameterAssert ((sock == theSocket4) || (sock == theSocket6)); + + switch (type) + { + case kCFSocketConnectCallBack: + // The data argument is either NULL or a pointer to an SInt32 error code, if the connect failed. + if(pData) + [self doSocketOpen:sock withCFSocketError:kCFSocketError]; + else + [self doSocketOpen:sock withCFSocketError:kCFSocketSuccess]; + break; + case kCFSocketAcceptCallBack: + [self doAcceptFromSocket:sock withNewNativeSocket:*((CFSocketNativeHandle *)pData)]; + break; + default: + NSLog(@"AsyncSocket %p received unexpected CFSocketCallBackType %i", self, (int)type); + break; + } +} + +- (void)doCFReadStreamCallback:(CFStreamEventType)type forStream:(CFReadStreamRef)stream +{ + NSParameterAssert(theReadStream != NULL); + + CFStreamError err; + switch (type) + { + case kCFStreamEventOpenCompleted: + theFlags |= kDidCompleteOpenForRead; + [self doStreamOpen]; + break; + case kCFStreamEventHasBytesAvailable: + if(theFlags & kStartingReadTLS) { + [self onTLSHandshakeSuccessful]; + } + else { + theFlags |= kSocketHasBytesAvailable; + [self doBytesAvailable]; + } + break; + case kCFStreamEventErrorOccurred: + case kCFStreamEventEndEncountered: + err = CFReadStreamGetError (theReadStream); + [self closeWithError: [self errorFromCFStreamError:err]]; + break; + default: + NSLog(@"AsyncSocket %p received unexpected CFReadStream callback, CFStreamEventType %i", self, (int)type); + } +} + +- (void)doCFWriteStreamCallback:(CFStreamEventType)type forStream:(CFWriteStreamRef)stream +{ + NSParameterAssert(theWriteStream != NULL); + + CFStreamError err; + switch (type) + { + case kCFStreamEventOpenCompleted: + theFlags |= kDidCompleteOpenForWrite; + [self doStreamOpen]; + break; + case kCFStreamEventCanAcceptBytes: + if(theFlags & kStartingWriteTLS) { + [self onTLSHandshakeSuccessful]; + } + else { + theFlags |= kSocketCanAcceptBytes; + [self doSendBytes]; + } + break; + case kCFStreamEventErrorOccurred: + case kCFStreamEventEndEncountered: + err = CFWriteStreamGetError (theWriteStream); + [self closeWithError: [self errorFromCFStreamError:err]]; + break; + default: + NSLog(@"AsyncSocket %p received unexpected CFWriteStream callback, CFStreamEventType %i", self, (int)type); + } +} + +/** + * This is the callback we setup for CFSocket. + * This method does nothing but forward the call to it's Objective-C counterpart +**/ +static void MyCFSocketCallback (CFSocketRef sref, CFSocketCallBackType type, CFDataRef address, const void *pData, void *pInfo) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + AsyncSocket *theSocket = [[(AsyncSocket *)pInfo retain] autorelease]; + [theSocket doCFSocketCallback:type forSocket:sref withAddress:(NSData *)address withData:pData]; + + [pool release]; +} + +/** + * This is the callback we setup for CFReadStream. + * This method does nothing but forward the call to it's Objective-C counterpart +**/ +static void MyCFReadStreamCallback (CFReadStreamRef stream, CFStreamEventType type, void *pInfo) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + AsyncSocket *theSocket = [[(AsyncSocket *)pInfo retain] autorelease]; + [theSocket doCFReadStreamCallback:type forStream:stream]; + + [pool release]; +} + +/** + * This is the callback we setup for CFWriteStream. + * This method does nothing but forward the call to it's Objective-C counterpart +**/ +static void MyCFWriteStreamCallback (CFWriteStreamRef stream, CFStreamEventType type, void *pInfo) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + AsyncSocket *theSocket = [[(AsyncSocket *)pInfo retain] autorelease]; + [theSocket doCFWriteStreamCallback:type forStream:stream]; + + [pool release]; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Class Methods +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Return line separators. ++ (NSData *)CRLFData +{ + return [NSData dataWithBytes:"\x0D\x0A" length:2]; +} + ++ (NSData *)CRData +{ + return [NSData dataWithBytes:"\x0D" length:1]; +} + ++ (NSData *)LFData +{ + return [NSData dataWithBytes:"\x0A" length:1]; +} + ++ (NSData *)ZeroData +{ + return [NSData dataWithBytes:"" length:1]; +} + +@end diff --git a/EmailScheduler/MGMHTTP/MGMHTTPAddons.h b/EmailScheduler/MGMHTTP/MGMHTTPAddons.h new file mode 100644 index 0000000..91a99fe --- /dev/null +++ b/EmailScheduler/MGMHTTP/MGMHTTPAddons.h @@ -0,0 +1,38 @@ +// +// MGMHTTPAddons.h +// MGMHTTP +// +// Created by Mr. Gecko on 8/14/13. +// Copyright (c) 2014 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import +#import "MGMHTTPDefines.h" + +@interface NSString (MGMHTTPAddons) +- (NSString *)trim; +- (NSString *)trimQuotes; +- (NSString *)replace:(NSString *)targetString with:(NSString *)replaceString; +- (NSString *)urlEncode; +- (NSString *)urlDecode; ++ (NSString *)stringWithInteger:(MGMInteger)theInteger; ++ (NSString *)stringWithDate:(NSDate *)theDate; +@end diff --git a/EmailScheduler/MGMHTTP/MGMHTTPAddons.m b/EmailScheduler/MGMHTTP/MGMHTTPAddons.m new file mode 100644 index 0000000..c11bcc0 --- /dev/null +++ b/EmailScheduler/MGMHTTP/MGMHTTPAddons.m @@ -0,0 +1,89 @@ +// +// MGMHTTPAddons.m +// MGMHTTP +// +// Created by Mr. Gecko on 8/14/13. +// Copyright (c) 2014 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import "MGMHTTPAddons.h" + + +@implementation NSString (MGMHTTPAddons) +- (NSString *)trim { + return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; +} + +- (NSString *)trimQuotes { + return [self stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\"'`"]]; +} + +- (NSString *)replace:(NSString *)targetString with:(NSString *)replaceString { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSMutableString *temp = [[NSMutableString alloc] init]; + NSRange replaceRange = NSMakeRange(0, [self length]); + NSRange rangeInOriginalString = replaceRange; + int replaced = 0; + + while (1) { + NSRange rangeToCopy; + NSRange foundRange = [self rangeOfString:targetString options:0 range:rangeInOriginalString]; + if (foundRange.length==0) break; + rangeToCopy = NSMakeRange(rangeInOriginalString.location, foundRange.location - rangeInOriginalString.location); + [temp appendString:[self substringWithRange:rangeToCopy]]; + [temp appendString:replaceString]; + rangeInOriginalString.length -= (NSMaxRange(foundRange)-rangeInOriginalString.location); + rangeInOriginalString.location = NSMaxRange(foundRange); + replaced++; + if ((replaced%100)==0) { + [pool drain]; + pool = [NSAutoreleasePool new]; + } + } + if (rangeInOriginalString.length>0) [temp appendString:[self substringWithRange:rangeInOriginalString]]; + [pool release]; + + return [temp autorelease]; +} + +- (NSString *)urlEncode { + NSString *result = [self stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + CFStringRef escapedString = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, NULL, CFSTR("!*'();:^@&=+$,/?%#[]|"), kCFStringEncodingUTF8); + + if (escapedString!=NULL) + result = [(NSString *)escapedString autorelease]; + return result; +} + +- (NSString *)urlDecode { + return [[self replace:@"+" with:@" "] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; +} + ++ (NSString *)stringWithInteger:(MGMInteger)theInteger { + return [NSString stringWithFormat:@"%ld", theInteger]; +} ++ (NSString *)stringWithDate:(NSDate *)theDate { + NSDateFormatter *formatter = [[NSDateFormatter new] autorelease]; + [formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]]; + [formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss zzz"]; + return [formatter stringFromDate:theDate]; +} +@end diff --git a/EmailScheduler/MGMHTTP/MGMHTTPClient.h b/EmailScheduler/MGMHTTP/MGMHTTPClient.h new file mode 100644 index 0000000..c4ebd13 --- /dev/null +++ b/EmailScheduler/MGMHTTP/MGMHTTPClient.h @@ -0,0 +1,157 @@ +// +// MGMHTTPClient.h +// MGMHTTP +// +// Created by Mr. Gecko on 8/14/13. +// Copyright (c) 2014 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import +#import "MGMHTTPDefines.h" + +#if TARGET_OS_IPHONE +#import +#endif + +@class AsyncSocket, MGMHTTPServer, MGMHTTPResponse; + +extern NSString * const MGMClientDisconnectedNotification; + +extern NSString * const MGMRPath; +extern NSString * const MGMREncoding; +extern NSString * const MGMGatewayInterface; +extern NSString * const MGMContentType; +extern NSString * const MGMContentLength; +extern NSString * const MGMServerProtocol; +extern NSString * const MGMRequestMethod; +extern NSString * const MGMRequestURI; +extern NSString * const MGMScriptName; +extern NSString * const MGMRemotePort; +extern NSString * const MGMServerAddress; +extern NSString * const MGMServerPort; +extern NSString * const MGMQueryString; +extern NSString * const MGMCookies; +extern NSString * const MGMPCRemoteAddress; +extern NSString * const MGMRemoteAddress; +extern NSString * const MGMClientIP; +extern NSString * const MGMForwardedFor; +extern NSString * const MGMConnection; +extern NSString * const MGMServerHeader; +extern NSString * const MGMAcceptRanges; +extern NSString * const MGMDate; + +@interface MGMHTTPClient : NSObject { + AsyncSocket *clientSocket; + MGMHTTPServer *server; +#if MGMHTTPThreaded + NSRunLoop *threadRunLoop; + NSThread *thread; +#endif + + CFHTTPMessageRef clientRequest; + NSDictionary *requestHeaders; + int numHeaders; + NSMutableDictionary *headers; + NSDictionary *getInputs; + NSDictionary *postInputs; + NSData *postData; + NSMutableDictionary *cookies; + NSMutableArray *cookiesToPost; + NSDictionary *filesUploaded; + BOOL headersPosted; + + //File Upload + NSString *fBoundary; + char fPutback[1024]; + int fReadPosition; + int fWritePosition; + int fOffset; + BOOL isMultipart; + + NSString *httpVersion; + + MGMHTTPResponse *httpResponse; + BOOL isBufferBased; + NSMutableData *responseBuffer; + BOOL isBufferSending; + + NSMutableArray *ranges; + NSMutableArray *rangesHeaders; + NSString *rangesBoundry; + int rangeIndex; + + MGMInteger requestContentLengthReceived; + + BOOL isKeepAlive; + BOOL clientDisconnected; + BOOL disconnecting; +} +- (AsyncSocket *)clientSocket; +#if MGMHTTPThreaded +- (NSRunLoop *)runLoop; +#endif + ++ (id)clientWithSocket:(AsyncSocket *)theSocket server:(MGMHTTPServer *)theServer; +- (id)initWithSocket:(AsyncSocket *)theSocket server:(MGMHTTPServer *)theServer; + +- (void)setHTTPVersion:(NSString *)theVersion; + +- (void)setHTTPResponse:(MGMHTTPResponse *)theResponse; + +- (void)sendErrorNum:(int)theErrorNum description:(NSString *)theDescription returnHTML:(BOOL)hasHTML; + +- (NSString *)requestHeaderWithName:(NSString *)name; +- (NSDictionary *)requestHeaders; +- (MGMInteger)contentLength; + +- (BOOL)setHeader:(NSString *)header withName:(NSString *)name; +- (BOOL)deleteHeaderWithName:(NSString *)name; +- (NSString *)headerWithName:(NSString *)name; +- (NSDictionary *)headers; + +- (BOOL)setCookie:(NSString *)cookie forName:(NSString *)name expires:(NSDate *)expires domain:(NSString *)domain path:(NSString *)path secure:(BOOL)secure httpOnly:(BOOL)httpOnly; +- (BOOL)deleteCookieWithName:(NSString *)name withDomain:(NSString *)domain withPath:(NSString *)path secure:(BOOL)secure httpOnly:(BOOL)httpOnly; +- (NSString *)cookieWithName:(NSString *)name; +- (NSDictionary *)cookies; + +- (NSString *)getInputWithName:(NSString *)name; +- (NSDictionary *)getInputs; +- (NSString *)postInputWithName:(NSString *)name; +- (NSDictionary *)postInputs; + +- (NSString *)requestWithName:(NSString *)name; +- (NSDictionary *)requests; + +- (NSDictionary *)fileWithName:(NSString *)Name; +- (NSDictionary *)filesUploaded; + +- (NSString *)userIP; + +- (NSArray *)sslCertificates; +- (void)replyToClient; + +- (void)printData:(NSData *)data; +- (void)print:(NSString *)format, ...; +- (void)printError:(NSString *)format, ...; +- (void)flush; + +- (void)disconnect; +@end \ No newline at end of file diff --git a/EmailScheduler/MGMHTTP/MGMHTTPClient.m b/EmailScheduler/MGMHTTP/MGMHTTPClient.m new file mode 100644 index 0000000..586f517 --- /dev/null +++ b/EmailScheduler/MGMHTTP/MGMHTTPClient.m @@ -0,0 +1,1202 @@ +// +// MGMHTTPClient.m +// MGMHTTP +// +// Created by Mr. Gecko on 8/14/13. +// Copyright (c) 2014 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import "MGMHTTPClient.h" +#import "MGMHTTPServer.h" +#import "MGMHTTPResponse.h" +#import "MGMHTTPAddons.h" +#import "AsyncSocket.h" + +BOOL MGMDisconnectAfterSent = NO; + +#if TARGET_OS_IPHONE +int MGMReadChunkSize = (1024 * 128); +#else +int MGMReadChunkSize = (1024 * 512); +#endif + +#if TARGET_OS_IPHONE +int MGMPostChunkSize = (1024 * 32); +#else +int MGMPostChunkSize = (1024 * 128); +#endif +int MGMMaxFileSize = (1024 * 1024 * 20); + +int MGMReadTimeOut = -1; +int MGMWriteHeaderTimeOut = 30; +int MGMWriteBodyTimeOut = -1; +int MGMWriteErrorTimeOut = 30; + +int MGMLimitMaxHeaderLineLength = 8190; +int MGMLimitMaxHeaderLines = 100; +int MGMHTTPBufferLimit = 7000; +int MGMPostMaxLength = 1048576; + +enum MGMHTTPTags { + MGMHTTPRequestHeaderTag = 1, + MGMHTTPRequestBodyTag, + MGMHTTPPartialResponseTag, + MGMHTTPPartialResponseHeaderTag, + MGMHTTPPartialResponseBodyTag, + MGMHTTPPartialRangeResponseBodyTag, + MGMHTTPPartialRangesResponseHeaderTag, + MGMHTTPBufferResponseBodyTag, + MGMHTTPBufferResponseBodyFinalTag, + MGMHTTPResponseTag, + MGMHTTPFinalResponseTag +}; + +//Server info +NSString * const MGMHTTPVersion = @"MGMServer/0.1"; +NSString * const MGMTmpFileFolder = @"/tmp/mgm/"; +NSString * const MGMPropertyFile = @"/Library/Preferences/com.MrGeckosMedia.MGM.plist"; + + +//Dictionary Keys +NSString * const MGMNameKey = @"name"; +NSString * const MGMFileNameKey = @"filename"; +NSString * const MGMFileSizeKey = @"filesize"; +NSString * const MGMFileTypeKey = @"filetype"; +NSString * const MGMFilePathKey = @"filepath"; +NSString * const MGMCookieKey = @"cookie"; +NSString * const MGMExpiresKey = @"expires"; +NSString * const MGMDomainKey = @"domain"; +NSString * const MGMPathKey = @"path"; +NSString * const MGMSecureKey = @"secure"; +NSString * const MGMHTTPOnlyKey = @"httpOnly"; + +//Headers +NSString * const MGMRPath = @"PATH"; +NSString * const MGMREncoding = @"__CF_USER_TEXT_ENCODING"; +NSString * const MGMGatewayInterface = @"gateway-interface"; +NSString * const MGMContentType = @"content-type"; +NSString * const MGMContentLength = @"content-length"; +NSString * const MGMServerProtocol = @"server-protocol"; +NSString * const MGMRequestMethod = @"request-method"; +NSString * const MGMRequestURI = @"request-uri"; +NSString * const MGMScriptName = @"script-name"; +NSString * const MGMRemotePort = @"remote-port"; +NSString * const MGMServerAddress = @"server-addr"; +NSString * const MGMServerPort = @"server-port"; +NSString * const MGMQueryString = @"query-string"; +NSString * const MGMCookies = @"cookie"; +NSString * const MGMPCRemoteAddress = @"pc-remote-addr"; +NSString * const MGMRemoteAddress = @"remote-addr"; +NSString * const MGMClientIP = @"client-ip"; +NSString * const MGMForwardedFor = @"x-forwarded-for"; +NSString * const MGMConnection = @"connection"; +NSString * const MGMServerHeader = @"server"; +NSString * const MGMAcceptRanges = @"accept-ranges"; +NSString * const MGMDate = @"date"; + +NSString * const MGMClientDisconnectedNotification = @"MGMClientDisconnectedNotification"; + +#define BAPPEND(ch) \ +{ \ + putc(ch, outf); \ + outLen++; \ +} + +@interface MGMHTTPClient (MGMPrivate) +- (void)sendHTTPResponse; +- (void)cleanConnection:(long)tag; +@end + +@implementation MGMHTTPClient ++ (id)clientWithSocket:(AsyncSocket *)theSocket server:(MGMHTTPServer *)theServer { + return [[[self alloc] initWithSocket:theSocket server:theServer] autorelease]; +} +- (id)initWithSocket:(AsyncSocket *)theSocket server:(MGMHTTPServer *)theServer { + if (self = [super init]) { + [self setHTTPVersion:(NSString *)kCFHTTPVersion1_1]; + headersPosted = NO; + isBufferBased = NO; + + server = [theServer retain]; + clientRequest = CFHTTPMessageCreateEmpty(kCFAllocatorDefault, YES); + headers = [NSMutableDictionary new]; + + clientSocket = [theSocket retain]; + [clientSocket setDelegate:self]; + [clientSocket enablePreBuffering]; + +#if MGMHTTPThreaded + [NSThread detachNewThreadSelector:@selector(startThread) toTarget:self withObject:nil]; + while (thread==nil) { + CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1, YES); + } +#endif + } + return self; +} +- (void)dealloc { +#if MGMHTTPDebug + NSLog(@"Release"); +#endif + [clientSocket release]; + [server release]; + [requestHeaders release]; + [headers release]; + [getInputs release]; + [postInputs release]; + [postData release]; + [cookies release]; + [cookiesToPost release]; + [filesUploaded release]; + [fBoundary release]; + [httpVersion release]; + [httpResponse release]; + [responseBuffer release]; + [ranges release]; + [rangesHeaders release]; + [rangesBoundry release]; + CFRelease(clientRequest); + [super dealloc]; +} + +- (AsyncSocket *)clientSocket { + return clientSocket; +} + +#if MGMHTTPThreaded +- (void)setRunLoop:(NSRunLoop *)theRunLoop { + threadRunLoop = [theRunLoop retain]; +} +- (NSRunLoop *)runLoop { + return threadRunLoop; +} +- (void)setThread:(NSThread *)theThread { + thread = [theThread retain]; +} +- (void)startThread { + NSAutoreleasePool *pool = [NSAutoreleasePool new]; + [self performSelectorOnMainThread:@selector(setRunLoop:) withObject:[NSRunLoop currentRunLoop] waitUntilDone:YES]; + [self performSelectorOnMainThread:@selector(setThread:) withObject:[NSThread currentThread] waitUntilDone:YES]; + while (!clientDisconnected) { + CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1, YES); + [pool drain]; + pool = [NSAutoreleasePool new]; + } + [threadRunLoop release]; + threadRunLoop = nil; + [thread release]; + thread = nil; + [pool drain]; +} +#endif + +- (BOOL)parseRanges:(NSString *)theRanges withResponseLength:(MGMInteger)theResponseLength { + NSRange equalRange = [theRanges rangeOfString:@"="]; + if (equalRange.location==NSNotFound) + return NO; + + NSString *rangeType = [[theRanges substringToIndex:equalRange.location] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + NSString *rangeValue = [[theRanges substringFromIndex:equalRange.location+equalRange.length] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; + if (![[rangeType lowercaseString] isEqualToString:@"bytes"]) + return NO; + + NSArray *rangeComponents = [rangeValue componentsSeparatedByString:@","]; + if ([rangeComponents count]==0) + return NO; + + [ranges release]; + ranges = [NSMutableArray new]; + rangeIndex = 0; + for (int i=0; i<[rangeComponents count]; i++) { + NSRange dashRange = [[rangeComponents objectAtIndex:i] rangeOfString:@"-"]; + if (dashRange.location == NSNotFound) { + [ranges addObject:[NSValue valueWithRange:NSMakeRange([[rangeComponents objectAtIndex:i] longValue], 1)]]; + } else { + MGMInteger r1 = strtol([[[rangeComponents objectAtIndex:i] substringToIndex:dashRange.location] UTF8String], NULL, 0); + MGMInteger r2 = strtol([[[rangeComponents objectAtIndex:i] substringFromIndex:dashRange.location+dashRange.length] UTF8String], NULL, 0); + + if (r2==0) + r2 = theResponseLength; + if (r1>r2) + return NO; + + [ranges addObject:[NSValue valueWithRange:NSMakeRange(r1, r2-r1+1)]]; + } + } + + if ([ranges count]==0) + return NO; + + //Check for intercepts + for (int i=0; i<[ranges count]-1; i++) { + NSRange range = [[ranges objectAtIndex:i] rangeValue]; + for (int r=i+1; r<[ranges count]; r++) { + if (NSIntersectionRange(range, [[ranges objectAtIndex:r] rangeValue]).length!=0) + return NO; + } + } + return YES; +} + +- (void)setHTTPVersion:(NSString *)theVersion { + [httpVersion release]; + httpVersion = [theVersion retain]; +} + +- (void)setHTTPResponse:(MGMHTTPResponse *)theResponse { + [httpResponse release]; + httpResponse = [theResponse retain]; +} + +- (BOOL)supportsMethod:(NSString *)theMethod { + return [[theMethod lowercaseString] isEqual:@"put"] || [[theMethod lowercaseString] isEqual:@"get"] || [[theMethod lowercaseString] isEqual:@"post"] || [[theMethod lowercaseString] isEqual:@"head"]; +} + +- (NSString *)getDescriptionForHTTPCode:(int)theCode { + switch (theCode) { + case 100: + return @"Continue"; + break; + case 101: + return @"Switching Protocols"; + break; + case 102: + return @"Processing"; + break; + case 200: + return @"OK"; + break; + case 201: + return @"Created"; + break; + case 202: + return @"Accepted"; + break; + case 203: + return @"Non-Authoritative Information"; + break; + case 204: + return @"No Content"; + break; + case 205: + return @"Reset Content"; + break; + case 206: + return @"Partial Content"; + break; + case 207: + return @"Multi-Status"; + break; + case 208: + return @"Already Reported"; + break; + case 226: + return @"IM Used"; + break; + case 300: + return @"Multiple Choices"; + break; + case 301: + return @"Moved Permanently"; + break; + case 302: + return @"Found"; + break; + case 303: + return @"See Other"; + break; + case 304: + return @"Not Modified"; + break; + case 305: + return @"Use Proxy"; + break; + case 307: + return @"Temporary Redirect"; + break; + case 308: + return @"Permanent Redirect"; + break; + case 400: + return @"Bad Request"; + break; + case 401: + return @"Unauthorized"; + break; + case 402: + return @"Payment Required"; + break; + case 403: + return @"Forbidden"; + break; + case 404: + return @"Not Found"; + break; + case 405: + return @"Method Not Allowed"; + break; + case 406: + return @"Not Acceptable"; + break; + case 407: + return @"Proxy Authentication Required"; + break; + case 408: + return @"Request Timeout"; + break; + case 409: + return @"Conflict"; + break; + case 410: + return @"Gone"; + break; + case 411: + return @"Length Required"; + break; + case 412: + return @"Precondition Failed"; + break; + case 413: + return @"Request Entity Too Large"; + break; + case 414: + return @"Request-URI Too Long"; + break; + case 415: + return @"Unsupported Media Type"; + break; + case 416: + return @"Requested Range Not Satisfiable"; + break; + case 417: + return @"Expectation Failed"; + break; + case 418: + return @"I'm a teapot"; + break; + case 420: + return @"Enhance Your Calm"; + break; + case 422: + return @"Unprocessable Entity"; + break; + case 423: + return @"Locked"; + break; + case 425: + return @"Unordered Collection"; + break; + case 426: + return @"Upgrade Required"; + break; + case 428: + return @"Precondition Required"; + break; + case 429: + return @"Too Many Requests"; + break; + case 431: + return @"Request Header Fields Too Large"; + break; + case 444: + return @"No Response"; + break; + case 451: + return @"Unavailable For Legal Reasons"; + break; + case 499: + return @"Client Closed Request"; + break; + case 500: + return @"Internal Server Error"; + break; + case 501: + return @"Not Implemented"; + break; + case 502: + return @"Bad Gateway"; + break; + case 503: + return @"Service Unavailable"; + break; + case 504: + return @"Gateway Timeout"; + break; + case 505: + return @"HTTP Version Not Supported"; + break; + case 506: + return @"Variant Also Negotiates"; + break; + case 507: + return @"Insufficient Storage"; + break; + case 508: + return @"Loop Detected"; + break; + case 509: + return @"Bandwidth Limit Exceeded"; + break; + case 510: + return @"Not Extended"; + break; + case 511: + return @"Network Authentication Required"; + break; + case 598: + return @"Network read timeout error"; + break; + case 599: + return @"Network connect timeout error"; + break; + default: + return @"Unknown Code"; + break; + } +} + +- (NSMutableData *)getResponseWithCode:(int)theCode description:(NSString *)theDescription { + NSString *description; + if (theDescription!=nil) { + description = theDescription; + } else { + description = [self getDescriptionForHTTPCode:theCode]; + } + + NSMutableData *response = [NSMutableData data]; + [response appendData:[[NSString stringWithFormat:@"%@ %d %@\r\n", httpVersion, theCode, description] dataUsingEncoding:NSUTF8StringEncoding]]; + + if (!headersPosted) { + if ([headers objectForKey:MGMServerHeader]==nil) + [self setHeader:MGMHTTPVersion withName:MGMServerHeader]; + if (MGMDisconnectAfterSent && [headers objectForKey:MGMConnection]==nil) + [self setHeader:@"close" withName:MGMConnection]; + if ([headers objectForKey:MGMAcceptRanges]==nil) + [self setHeader:@"bytes" withName:MGMAcceptRanges]; + if ([headers objectForKey:MGMDate]==nil) + [self setHeader:[NSString stringWithDate:[NSDate date]] withName:MGMDate]; + if ([headers objectForKey:MGMContentType]==nil) + [self setHeader:@"text/html" withName:MGMContentType]; + headersPosted = YES; + } + + NSMutableString *headerString = [NSMutableString string]; + if (cookiesToPost!=nil) { + for (int i=0; i<[cookiesToPost count]; i++) { + NSDictionary *cookie = [cookiesToPost objectAtIndex:i]; + + [headerString appendFormat:@"Set-Cookie: %@=%@", [[cookie objectForKey:MGMNameKey] replace:@" " with:@"+"], [[cookie objectForKey:MGMCookieKey] replace:@" " with:@"+"]]; + if ([cookie objectForKey:MGMExpiresKey]) + [headerString appendFormat:@"; expires=%@", [NSString stringWithDate:[cookie objectForKey:MGMExpiresKey]]]; + if ([cookie objectForKey:MGMDomainKey]) + [headerString appendFormat:@"; domain=%@", [[cookie objectForKey:MGMDomainKey] replace:@" " with:@"+"]]; + if ([cookie objectForKey:MGMPathKey]) + [headerString appendFormat:@"; path=%@", [[cookie objectForKey:MGMPathKey] replace:@" " with:@"+"]]; + if ([[cookie objectForKey:MGMSecureKey] boolValue]) + [headerString appendString:@"; secure"]; + if ([[cookie objectForKey:MGMHTTPOnlyKey] boolValue]) + [headerString appendString:@"; httponly"]; + [headerString appendString:@"\r\n"]; + } + } + + NSArray *keys = [headers allKeys]; + for (int i=0; i<[keys count]; i++) { + NSArray *nameA = [[keys objectAtIndex:i] componentsSeparatedByString:@"-"]; + NSMutableString *name = [NSMutableString string]; + for (int d=0; d<[nameA count]; d++) { + if (d==0) { + [name appendString:[[nameA objectAtIndex:d] capitalizedString]]; + } else { + [name appendFormat:@"-%@", [[nameA objectAtIndex:d] capitalizedString]]; + } + } + [headerString appendFormat:@"%@: %@\r\n", name, [headers objectForKey:[keys objectAtIndex:i]]]; + } + [response appendData:[headerString dataUsingEncoding:NSUTF8StringEncoding]]; + [response appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; + return response; +} + +- (void)sendErrorNum:(int)theErrorNum description:(NSString *)theDescription returnHTML:(BOOL)hasHTML { + NSString *description; + if (theDescription!=nil) { + description = theDescription; + } else { + description = [self getDescriptionForHTTPCode:theErrorNum]; + } +#if MGMHTTPDebug + NSLog(@"Error %d - %@", theErrorNum, description); +#endif + + NSMutableString *htmlString = [NSMutableString string]; + if (hasHTML) { + [htmlString appendString:@""]; + [htmlString appendFormat:@"%d %@", theErrorNum, description]; + [htmlString appendFormat:@"

%@

", description]; + } + [self setHeader:[NSString stringWithInteger:[htmlString length]] withName:@"Content-Length"]; + + NSMutableData *response = [self getResponseWithCode:theErrorNum description:description]; + [response appendData:[htmlString dataUsingEncoding:NSUTF8StringEncoding]]; + [clientSocket writeData:response withTimeout:MGMWriteErrorTimeOut tag:MGMHTTPResponseTag]; +} + +- (NSString *)requestHeaderWithName:(NSString *)name { + return [requestHeaders objectForKey:[name lowercaseString]]; +} +- (NSDictionary *)requestHeaders { + return [NSDictionary dictionaryWithDictionary:requestHeaders]; +} +- (MGMInteger)contentLength { + if ([self requestHeaderWithName:MGMContentLength]==nil) + return 0; + return strtol([[self requestHeaderWithName:MGMContentLength] UTF8String], NULL, 0); +} + +- (BOOL)setHeader:(NSString *)header withName:(NSString *)name { + if (!headersPosted) { + [headers setObject:header forKey:(name==nil ? @"" : [name lowercaseString])]; + return YES; + } else if (isBufferBased) { + [self printError:@"Headers has already been posted."]; + } + return NO; +} +- (BOOL)deleteHeaderWithName:(NSString *)name { + if (!headersPosted) { + if ([headers objectForKey:[name lowercaseString]]!=nil) { + [headers removeObjectForKey:[name lowercaseString]]; + return YES; + } + } else if (isBufferBased) { + [self printError:@"Headers has already been posted."]; + } + return NO; +} +- (NSString *)headerWithName:(NSString *)name { + return [headers objectForKey:[name lowercaseString]]; +} +- (NSDictionary *)headers { + return [NSDictionary dictionaryWithDictionary:headers]; +} + +- (BOOL)setCookie:(NSString *)cookie forName:(NSString *)name expires:(NSDate *)expires domain:(NSString *)domain path:(NSString *)path secure:(BOOL)secure httpOnly:(BOOL)httpOnly { + if (headersPosted) { + if (isBufferBased) { + [self printError:@"Headers has already been posted."]; + } + } else if (name!=nil && ![name isEqualToString:@""]) { + if (cookiesToPost==nil) { + cookiesToPost = [[NSMutableArray new] retain]; + } + for (int i=0; i<[cookiesToPost count]; i++) { + if ([[[cookiesToPost objectAtIndex:i] objectForKey:MGMNameKey] isEqualToString:name]) { + [cookiesToPost removeObjectAtIndex:i]; + } + } + NSMutableDictionary *cookieD = [NSMutableDictionary new]; + [cookieD setObject:name forKey:MGMNameKey]; + if (cookie==nil) { + [cookies setObject:@"" forKey:name]; + [cookieD setObject:@"" forKey:MGMCookieKey]; + } else { + [cookies setObject:cookie forKey:name]; + [cookieD setObject:cookie forKey:MGMCookieKey]; + } + if (expires!=nil) { + [cookieD setObject:expires forKey:MGMExpiresKey]; + } + if (domain!=nil && ![domain isEqualToString:@""]) { + [cookieD setObject:domain forKey:MGMDomainKey]; + } + if (path!=nil && ![path isEqualToString:@""]) { + [cookieD setObject:path forKey:MGMPathKey]; + } + [cookieD setObject:[NSNumber numberWithBool:secure] forKey:MGMSecureKey]; + [cookieD setObject:[NSNumber numberWithBool:httpOnly] forKey:MGMHTTPOnlyKey]; + [cookiesToPost addObject:[NSDictionary dictionaryWithDictionary:cookieD]]; + [cookieD release]; + return YES; + } + return NO; +} +- (BOOL)deleteCookieWithName:(NSString *)name withDomain:(NSString *)domain withPath:(NSString *)path secure:(BOOL)secure httpOnly:(BOOL)httpOnly { + if (name!=nil && ![name isEqualToString:@""]) { + if ([cookies objectForKey:name]!=nil) { + if ([self setCookie:nil forName:name expires:[NSDate date] domain:domain path:path secure:secure httpOnly:httpOnly]) { + [cookies removeObjectForKey:name]; + return YES; + } + } + } + return NO; +} +- (NSString *)cookieWithName:(NSString *)name { + return [cookies objectForKey:name]; +} +- (NSDictionary *)cookies { + return [NSDictionary dictionaryWithDictionary:cookies]; +} + +- (NSString *)getInputWithName:(NSString *)name { + return [getInputs objectForKey:name]; +} +- (NSDictionary *)getInputs { + return getInputs; +} +- (NSString *)postInputWithName:(NSString *)name { + return [postInputs objectForKey:name]; +} +- (NSDictionary *)postInputs { + return postInputs; +} + +- (NSString *)requestWithName:(NSString *)name { + NSString *request = nil; + if ([getInputs objectForKey:name]!=nil) + request = [getInputs objectForKey:name]; + if ([postInputs objectForKey:name]!=nil) + request = [postInputs objectForKey:name]; + if ([cookies objectForKey:name]!=nil) + request = [cookies objectForKey:name]; + return request; +} +- (NSDictionary *)requests { + NSMutableDictionary *requests = [NSMutableDictionary new]; + NSArray *keys; + keys = [getInputs allKeys]; + for (int i=0; i<[keys count]; i++) { + [requests setObject:[getInputs objectForKey:[keys objectAtIndex:i]] forKey:[keys objectAtIndex:i]]; + } + keys = [postInputs allKeys]; + for (int i=0; i<[keys count]; i++) { + [requests setObject:[postInputs objectForKey:[keys objectAtIndex:i]] forKey:[keys objectAtIndex:i]]; + } + keys = [cookies allKeys]; + for (int i=0; i<[keys count]; i++) { + [requests setObject:[cookies objectForKey:[keys objectAtIndex:i]] forKey:[keys objectAtIndex:i]]; + } + NSDictionary *returnRequests = [NSDictionary dictionaryWithDictionary:requests]; + [requests release]; + return returnRequests; +} +- (NSDictionary *)fileWithName:(NSString *)Name { + return [filesUploaded objectForKey:Name]; +} +- (NSDictionary *)filesUploaded { + return [NSDictionary dictionaryWithDictionary:filesUploaded]; +} + +- (NSString *)userIP { + NSString *ip = nil; + if ([self requestHeaderWithName:MGMRemoteAddress]) + ip = [self requestHeaderWithName:MGMRemoteAddress]; + if ([self requestHeaderWithName:MGMPCRemoteAddress]) + ip = [self requestHeaderWithName:MGMPCRemoteAddress]; + if ([self requestHeaderWithName:MGMClientIP]) + ip = [self requestHeaderWithName:MGMClientIP]; + if ([self requestHeaderWithName:MGMForwardedFor]) + ip = [self requestHeaderWithName:MGMForwardedFor]; + return ip; +} + +- (NSArray *)sslCertificates { + return nil; +} + +- (void)replyToClient { + if (isBufferBased) { + if (isBufferSending) { + isBufferSending = NO; + NSData *data = [NSData dataWithData:responseBuffer]; + [clientSocket writeData:data withTimeout:MGMWriteBodyTimeOut tag:MGMHTTPBufferResponseBodyFinalTag]; + [responseBuffer release]; + responseBuffer = nil; + } else { + isBufferBased = NO; + NSData *data = [NSData dataWithData:responseBuffer]; + httpResponse = [[MGMHTTPResponse responseWithData:data] retain]; + [responseBuffer release]; + responseBuffer = nil; + [self sendHTTPResponse]; + } + } else { + [self sendHTTPResponse]; + } +} + +- (void)sendHTTPResponse { + if (httpResponse==nil) { + if ([[server delegate] respondsToSelector:@selector(httpResponseForClient:)]) { + httpResponse = [[[server delegate] httpResponseForClient:self] retain]; + } else { + [self sendErrorNum:500 description:nil returnHTML:YES]; + return; + } + } + + MGMInteger contentLength = httpResponse ? [httpResponse contentLength] : 0; + if (contentLength==0) { + [self sendErrorNum:204 description:nil returnHTML:YES]; + [httpResponse release]; + httpResponse = nil; + return; + } + + NSString *rangeHeader = [self requestHeaderWithName:@"range"]; + BOOL isRangeRequest = NO; + + if (rangeHeader!=nil && [self parseRanges:rangeHeader withResponseLength:contentLength]) { + isRangeRequest = YES; + } + + NSMutableData *response; + if (!isRangeRequest) { + [self setHeader:[NSString stringWithInteger:contentLength] withName:@"Content-Length"]; + response = [self getResponseWithCode:200 description:nil]; + } else { + if ([ranges count]==1) { + NSRange range = [[ranges objectAtIndex:0] rangeValue]; + + [self setHeader:[NSString stringWithInteger:range.length] withName:@"Content-Length"]; + NSString *contentRangeStr = [NSString stringWithFormat:@"bytes %@-%@/%@", [NSString stringWithInteger:range.location], [NSString stringWithInteger:NSMaxRange(range)-1], [NSString stringWithInteger:contentLength]]; + [self setHeader:contentRangeStr withName:@"Content-Range"]; + } else { + rangesHeaders = [NSMutableArray new]; + srandomdev(); + rangesBoundry = [[NSString stringWithFormat:@"MGM%ld", random()%20000] retain]; + + MGMInteger actualContentLength = 0; + + for (int i=0; i < [ranges count]; i++) { + NSRange range = [[ranges objectAtIndex:i] rangeValue]; + + NSData *header = [[NSString stringWithFormat:@"\r\n--%@\r\nContent-Range: bytes %@-%@/%@\r\n\r\n", rangesBoundry, + [NSString stringWithInteger:range.location], [NSString stringWithInteger:NSMaxRange(range)-1], + [NSString stringWithInteger:contentLength]] dataUsingEncoding:NSUTF8StringEncoding]; + [rangesHeaders addObject:header]; + + actualContentLength += [header length]; + actualContentLength += range.length; + } + actualContentLength += 8+[rangesBoundry length]; + + [self setHeader:[NSString stringWithInteger:actualContentLength] withName:@"Content-Length"]; + [self setHeader:[NSString stringWithFormat:@"multipart/byteranges; boundary=%@", rangesBoundry] withName:@"Content-Type"]; + } + response = [self getResponseWithCode:206 description:nil]; + } + + if ([[[self requestHeaderWithName:MGMRequestMethod] lowercaseString] isEqual:@"head"]) { + [clientSocket writeData:response withTimeout:MGMWriteHeaderTimeOut tag:MGMHTTPResponseTag]; + } else { + [clientSocket writeData:response withTimeout:MGMWriteHeaderTimeOut tag:MGMHTTPPartialResponseTag]; + + if (!isRangeRequest) { + NSData *data = [httpResponse readDataOfLength:MGMReadChunkSize]; + [clientSocket writeData:data withTimeout:MGMWriteBodyTimeOut tag:MGMHTTPPartialResponseBodyTag]; + } else { + if ([ranges count]==1) { + NSRange range = [[ranges objectAtIndex:0] rangeValue]; + [httpResponse setOffset:range.location]; + + MGMInteger bytesToRead = range.length=MGMHTTPBufferLimit) { + if (!isBufferSending) { + isBufferSending = YES; + [self postHeaders]; + } + if (![[[self requestHeaderWithName:MGMRequestMethod] lowercaseString] isEqual:@"head"]) { + NSRange range = NSMakeRange(0, MGMHTTPBufferLimit); + NSData *data = [responseBuffer subdataWithRange:range]; + [clientSocket writeData:data withTimeout:MGMWriteBodyTimeOut tag:MGMHTTPBufferResponseBodyTag]; + while (range.length+range.location!=[responseBuffer length]) { + range.location += MGMHTTPBufferLimit; + range.length = ([responseBuffer length]-range.locationError: %@
", info]; + [info release]; +} +- (void)flush { + if (!isBufferSending) { + isBufferSending = YES; + [self postHeaders]; + } + if (![[[self requestHeaderWithName:MGMRequestMethod] lowercaseString] isEqual:@"head"]) { + NSData *data = [NSData dataWithData:responseBuffer]; + [clientSocket writeData:data withTimeout:MGMWriteBodyTimeOut tag:MGMHTTPBufferResponseBodyTag]; + } + [responseBuffer release]; + responseBuffer = [NSMutableData new]; +} + +- (BOOL)onSocketWillConnect:(AsyncSocket *)sock { + NSArray *certificates = [self sslCertificates]; + if (certificates!=nil && [certificates count]>0) { + NSMutableDictionary *settings = [NSMutableDictionary dictionary]; + [settings setObject:[NSNumber numberWithBool:YES] forKey:(NSString *)kCFStreamSSLIsServer]; + [settings setObject:certificates forKey:(NSString *)kCFStreamSSLCertificates]; + [settings setObject:(NSString *)kCFStreamSocketSecurityLevelNegotiatedSSL forKey:(NSString *)kCFStreamSSLLevel]; + + CFReadStreamSetProperty([clientSocket getCFReadStream], kCFStreamPropertySSLSettings, (CFDictionaryRef)settings); + CFWriteStreamSetProperty([clientSocket getCFWriteStream], kCFStreamPropertySSLSettings, (CFDictionaryRef)settings); + } + return YES; +} + +- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port { +#if MGMHTTPDebug + NSLog(@"Connected to %@:%hu", host, port); +#endif + [clientSocket readDataToData:[AsyncSocket CRLFData] withTimeout:MGMReadTimeOut maxLength:MGMLimitMaxHeaderLineLength tag:MGMHTTPRequestHeaderTag]; +} +- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData*)data withTag:(long)tag { + if (tag==MGMHTTPRequestHeaderTag) { + isKeepAlive = NO; + BOOL result = CFHTTPMessageAppendBytes(clientRequest, [data bytes], [data length]); + if (!result) { + [self sendErrorNum:400 description:nil returnHTML:YES]; + } else if (!CFHTTPMessageIsHeaderComplete(clientRequest)) { + numHeaders++; + if (numHeaders>MGMLimitMaxHeaderLines) { + [self disconnect]; + } else { + [clientSocket readDataToData:[AsyncSocket CRLFData] withTimeout:MGMReadTimeOut maxLength:MGMLimitMaxHeaderLineLength tag:MGMHTTPRequestHeaderTag]; + } + } else { + NSString *version = [(NSString *)CFHTTPMessageCopyVersion(clientRequest) autorelease]; + if (version==nil || (![version isEqualToString:(NSString *)kCFHTTPVersion1_1] && ![version isEqualToString:(NSString *)kCFHTTPVersion1_0])) { + [self sendErrorNum:505 description:nil returnHTML:YES]; + return; + } + NSString *method = [(NSString *)CFHTTPMessageCopyRequestMethod(clientRequest) autorelease]; + NSURL *uri = [(NSURL *)CFHTTPMessageCopyRequestURL(clientRequest) autorelease]; + + NSDictionary *requestHeadersDictionary = [(NSDictionary *)CFHTTPMessageCopyAllHeaderFields(clientRequest) autorelease]; + NSArray *requestKeys = [requestHeadersDictionary allKeys]; + NSMutableDictionary *requestDictionary = [NSMutableDictionary dictionary]; + for (int i=0; i<[requestKeys count]; i++) { + [requestDictionary setObject:[requestHeadersDictionary objectForKey:[requestKeys objectAtIndex:i]] forKey:[[requestKeys objectAtIndex:i] lowercaseString]]; + } + [requestDictionary setObject:version forKey:MGMServerProtocol]; + [requestDictionary setObject:method forKey:MGMRequestMethod]; + [requestDictionary setObject:[[uri standardizedURL] path] forKey:MGMScriptName]; + + NSString *path = [[[uri standardizedURL] path] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + CFStringRef escapedPath = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)[[uri standardizedURL] path], NULL, CFSTR("!*'();:^@&=+$,?%#[]|"), kCFStringEncodingUTF8); + + if (escapedPath!=NULL) + path = [(NSString *)escapedPath autorelease]; + [requestDictionary setObject:[NSString stringWithFormat:@"http://%@%@", [requestDictionary objectForKey:@"host"], path] forKey:MGMRequestURI]; + + [requestDictionary setObject:[clientSocket connectedHost] forKey:MGMRemoteAddress]; + [requestDictionary setObject:[[NSNumber numberWithInt:[clientSocket connectedPort]] stringValue] forKey:MGMRemotePort]; + [requestDictionary setObject:[clientSocket localHost] forKey:MGMServerAddress]; + [requestDictionary setObject:[[NSNumber numberWithInt:[clientSocket localPort]] stringValue] forKey:MGMServerPort]; + if ([uri query]!=nil) { + [requestDictionary setObject:[uri query] forKey:MGMQueryString]; + } + requestHeaders = [[NSDictionary dictionaryWithDictionary:requestDictionary] retain]; +#if MGMHTTPDebug + NSLog(@"%@", requestHeaders); +#endif + + NSArray *cookiesA = [[self requestHeaderWithName:MGMCookies] componentsSeparatedByString:@";"]; + cookies = [NSMutableDictionary new]; + for (int i=0; i<[cookiesA count]; i++) { + NSArray *cookie = [[cookiesA objectAtIndex:i] componentsSeparatedByString:@"="]; + [cookies setObject:([cookie count]==1 ? @"" : [[[cookie objectAtIndex:1] trim] urlDecode]) forKey:[[[cookie objectAtIndex:0] trim] urlDecode]]; + } + + if ([[self requestHeaderWithName:MGMQueryString] length]!=0) { + NSArray *formInputsA = [[self requestHeaderWithName:MGMQueryString] componentsSeparatedByString:@"&"]; + NSMutableDictionary *inputs = [NSMutableDictionary new]; + for (int i=0; i<[formInputsA count]; i++) { + NSArray *input = [[formInputsA objectAtIndex:i] componentsSeparatedByString:@"="]; + [inputs setObject:([input count]==1 ? @"" : [[input objectAtIndex:1] urlDecode]) forKey:[[input objectAtIndex:0] urlDecode]]; + } + getInputs = [[NSDictionary dictionaryWithDictionary:inputs] retain]; + [inputs release]; + } + + if (![self supportsMethod:method]) { + [self sendErrorNum:405 description:nil returnHTML:YES]; + return; + } + + MGMInteger requestContentLength = [self contentLength]; + BOOL expectsUpload = [[[self requestHeaderWithName:MGMRequestMethod] lowercaseString] isEqualToString:@"post"] || [[[self requestHeaderWithName:MGMRequestMethod] lowercaseString] isEqualToString:@"put"]; + if (expectsUpload) { + if(requestContentLength==0) { + [self sendErrorNum:400 description:nil returnHTML:YES]; + return; + } + } else if (requestContentLength!=0) { + [self sendErrorNum:400 description:nil returnHTML:YES]; + return; + } + requestContentLengthReceived = 0; + + if (expectsUpload) { + if ([[[self requestHeaderWithName:MGMRequestMethod] lowercaseString] isEqualToString:@"post"]) { + NSString *contentType = nil; + if ([self requestHeaderWithName:MGMContentType]!=nil) { + NSArray *contentA = [[self requestHeaderWithName:MGMContentType] componentsSeparatedByString:@";"]; + for (int i=0; i<[contentA count]; i++) { + NSArray *content = [[contentA objectAtIndex:i] componentsSeparatedByString:@"="]; + if ([content count]==1) { + contentType = [[[[content objectAtIndex:0] trim] lowercaseString] urlDecode]; + } else { + if ([[[[[content objectAtIndex:0] trim] lowercaseString] urlDecode] isEqualToString:@"boundary"]) { + [fBoundary release]; + fBoundary = [[@"--" stringByAppendingString:[[[content objectAtIndex:1] trim] urlDecode]] retain]; + } + } + + } + } + isMultipart = [contentType isEqualToString:@"multipart/form-data"]; + if (isMultipart) { + MGMInteger bytesToRead = requestContentLengthMGMPostMaxLength) { + [self sendErrorNum:400 description:nil returnHTML:YES]; + return; + } else { + [clientSocket readDataToLength:requestContentLength withTimeout:MGMReadTimeOut tag:MGMHTTPRequestBodyTag]; + } + } + } + } else { + [self replyToClient]; + } + } + } else { + if (isMultipart) { + requestContentLengthReceived += [data length]; + + MGMInteger requestContentLength = [self contentLength]; + if (requestContentLengthReceived0) { + [clientSocket writeData:data withTimeout:MGMWriteBodyTimeOut tag:MGMHTTPPartialResponseBodyTag]; + } else { + [self cleanConnection:tag]; + } + } else if (tag==MGMHTTPPartialRangeResponseBodyTag) { + NSRange range = [[ranges objectAtIndex:0] rangeValue]; + MGMInteger offset = [httpResponse offset]; + MGMInteger bytesRead = offset-range.location; + MGMInteger bytesLeft = range.length-bytesRead; + + if (bytesLeft>0) { + MGMInteger bytesToRead = bytesLeft0) { + MGMInteger bytesToRead = bytesLeft +#import "MGMHTTPDefines.h" + +@interface MGMHTTPResponse : NSObject { + MGMInteger offset; + NSData *data; +} ++ (id)responseWithData:(NSData *)theData; +- (id)initWithData:(NSData *)theData; ++ (id)responseWithString:(NSString *)theString; +- (id)initWithString:(NSString *)theString; + +- (MGMInteger)contentLength; + +- (MGMInteger)offset; +- (void)setOffset:(MGMInteger)theOffset; + +- (NSData *)readDataOfLength:(MGMInteger)theLength; +@end + +@interface MGMHTTPFileResponse : MGMHTTPResponse { + NSString *filePath; + NSFileHandle *fileHandle; +} ++ (id)responseWithFilePath:(NSString *)thePath; +- (id)initWithFilePath:(NSString *)thePath; +@end + +@interface MGMHTTPMIME : NSObject { + +} ++ (NSString *)mimeForExtension:(NSString *)theExtension; +@end \ No newline at end of file diff --git a/EmailScheduler/MGMHTTP/MGMHTTPResponse.m b/EmailScheduler/MGMHTTP/MGMHTTPResponse.m new file mode 100644 index 0000000..f8ab391 --- /dev/null +++ b/EmailScheduler/MGMHTTP/MGMHTTPResponse.m @@ -0,0 +1,131 @@ +// +// MGMHTTPResponse.m +// MGMHTTP +// +// Created by Mr. Gecko on 8/14/13. +// Copyright (c) 2014 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import "MGMHTTPResponse.h" + +@implementation MGMHTTPResponse ++ (id)responseWithData:(NSData *)theData { + return [[[self alloc] initWithData:theData] autorelease]; +} +- (id)initWithData:(NSData *)theData { + if (self = [super init]) { + data = [theData retain]; + } + return self; +} ++ (id)responseWithString:(NSString *)theString { + return [[[self alloc] initWithString:theString] autorelease]; +} +- (id)initWithString:(NSString *)theString { + if (self = [super init]) { + data = [[theString dataUsingEncoding:NSUTF8StringEncoding] retain]; + } + return self; +} +- (void)dealloc { + [data release]; + [super dealloc]; +} + +- (MGMInteger)contentLength { + return [data length]; +} + +- (MGMInteger)offset { + return offset; +} +- (void)setOffset:(MGMInteger)theOffset { + offset = theOffset; +} + +- (NSData *)readDataOfLength:(MGMInteger)theLength { + MGMInteger remaining = [data length]-offset; + MGMInteger length = theLength + +#define MGMHTTPDebug 0 +#define MGMHTTPThreaded 0 + +@class AsyncSocket, MGMHTTPClient, MGMHTTPResponse; + +@protocol MGMHTTPServerDelegate +- (Class)httpClientClass; +- (MGMHTTPResponse *)httpResponseForClient:(MGMHTTPClient *)theClient; +- (void)finnishedSendingResponse:(MGMHTTPClient *)theClient; +@end + +@interface MGMHTTPServer : NSObject +#if (MAC_OS_X_VERSION_MAX_ALLOWED >= 1060) + +#endif +{ + AsyncSocket *httpSocket; + + NSObject *delegate; + Class clientClass; + NSMutableArray *clientConnections; + int port; + + NSNetService *bonjour; + NSString *bonjourDomain; + NSString *bonjourType; + NSString *bonjourName; + BOOL bonjourEnabled; +} ++ (id)serverWithPort:(int)thePort delegate:(id)theDelegate; +- (id)initServerWithPort:(int)thePort delegate:(id)theDelegate; + +- (AsyncSocket *)httpSocket; +- (NSArray *)clientConnections; + +- (id)delegate; +- (void)setDelegate:(id)theDelegate; + +- (int)port; +- (void)setPort:(int)thePort; + +- (NSString *)bonjourDomain; +- (void)setBonjourDomain:(NSString *)theDomain; + +- (NSString *)bonjourType; +- (void)setBonjourType:(NSString *)theType; + +- (NSString *)bonjourName; +- (NSString *)bonjourPublishedName; +- (void)setBonjourName:(NSString *)theName; + +- (BOOL)isBonjourEnabled; +- (void)setBonjourEnabled:(BOOL)isEnabled; + +- (Class)httpClientClass; +- (void)setHTTPClientClass:(Class)theClientClass; + +- (BOOL)start:(NSError **)error; +- (void)stop; +@end \ No newline at end of file diff --git a/EmailScheduler/MGMHTTP/MGMHTTPServer.m b/EmailScheduler/MGMHTTP/MGMHTTPServer.m new file mode 100644 index 0000000..3a8b891 --- /dev/null +++ b/EmailScheduler/MGMHTTP/MGMHTTPServer.m @@ -0,0 +1,207 @@ +// +// MGMHTTPServer.m +// MGMHTTP +// +// Created by Mr. Gecko on 8/14/13. +// Copyright (c) 2014 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import "MGMHTTPServer.h" +#import "MGMHTTPClient.h" +#import "AsyncSocket.h" + +@implementation MGMHTTPServer ++ (id)serverWithPort:(int)thePort delegate:(id)theDelegate { + return [[[self alloc] initServerWithPort:thePort delegate:theDelegate] autorelease]; +} +- (id)initServerWithPort:(int)thePort delegate:(id)theDelegate { + if (self = [super init]) { + httpSocket = [[AsyncSocket alloc] initWithDelegate:self]; + port = thePort; + delegate = [theDelegate retain]; + clientClass = [MGMHTTPClient class]; + + [self setBonjourDomain:@"local."]; + [self setBonjourType:@"_http._tcp."]; + [self setBonjourName:@""]; + [self setBonjourEnabled:NO]; + clientConnections = [NSMutableArray new]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(clientDisconected:) name:MGMClientDisconnectedNotification object:nil]; + } + return self; +} +- (void)dealloc { + [httpSocket disconnect]; + [httpSocket release]; + [clientConnections release]; + [bonjour release]; + [bonjourDomain release]; + [bonjourType release]; + [bonjourName release]; + [super dealloc]; +} + +- (AsyncSocket *)httpSocket { + return httpSocket; +} +- (NSArray *)clientConnections { + return clientConnections; +} + +- (id)delegate { + return delegate; +} +- (void)setDelegate:(id)theDelegate { + delegate = theDelegate; +} + +- (int)port { + return port; +} +- (void)setPort:(int)thePort { + port = thePort; +} + +- (NSString *)bonjourDomain { + return bonjourDomain; +} +- (void)setBonjourDomain:(NSString *)theDomain { + [bonjourDomain release]; + bonjourDomain = [theDomain retain]; +} + +- (NSString *)bonjourType { + return bonjourType; +} +- (void)setBonjourType:(NSString *)theType { + [bonjourType release]; + bonjourType = [theType retain]; +} + +- (NSString *)bonjourName { + return bonjourName; +} +- (NSString *)bonjourPublishedName { + return [bonjour name]; +} +- (void)setBonjourName:(NSString *)theName { + [bonjourName release]; + bonjourName = [theName retain]; +} + +- (BOOL)isBonjourEnabled { + return bonjourEnabled; +} +- (void)setBonjourEnabled:(BOOL)isEnabled { + bonjourEnabled = isEnabled; + if (bonjourEnabled) { + if (bonjour==nil && [httpSocket isConnected]) { + bonjour = [[NSNetService alloc] initWithDomain:bonjourDomain type:bonjourType name:bonjourName port:port]; + [bonjour setDelegate:self]; + [bonjour publish]; + } + } else { + if (bonjour!=nil) { + [bonjour stop]; + [bonjour release]; + bonjour = nil; + } + } +} + +- (Class)httpClientClass { + return clientClass; +} +- (void)setHTTPClientClass:(Class)theClientClass { + clientClass = theClientClass; +} + +- (BOOL)start:(NSError **)error { + BOOL success = [httpSocket acceptOnPort:port error:error]; + if (success) { + port = [httpSocket localPort]; +#if MGMHTTPDebug + NSLog(@"Started server on port %d", port); +#endif + if (bonjourEnabled) { + bonjour = [[NSNetService alloc] initWithDomain:bonjourDomain type:bonjourType name:bonjourName port:port]; + [bonjour setDelegate:self]; + [bonjour publish]; + } + } else { + NSLog(@"Failed to start Server: %@", *error); + } + return success; +} +- (void)stop { + if(bonjour!=nil) { + [bonjour stop]; + [bonjour release]; + bonjour = nil; + } + [httpSocket disconnect]; + [clientConnections removeAllObjects]; +} + +- (void)netServiceDidPublish:(NSNetService *)sender { +#if MGMHTTPDebug + NSLog(@"Bonjour Published domain:%@ type:%@ name:%@", [sender domain], [sender type], [sender name]); +#endif +} +- (void)netService:(NSNetService *)sender didNotPublish:(NSDictionary *)errorDict { + NSLog(@"Failed to Publish Bonjour domain:%@ type:%@ name:%@ error:%@", [sender domain], [sender type], [sender name], errorDict); +} + +- (int)clientConnectionCount { + int count; + @synchronized(clientConnections) { + count = (int)[clientConnections count]; + } + return count; +} +#if MGMHTTPThreaded +- (NSRunLoop *)onSocket:(AsyncSocket *)sock wantsRunLoopForNewSocket:(AsyncSocket *)newSocket { + @synchronized(clientConnections) { + for (unsigned int i=0; i<[clientConnections count]; i++) { + if ([[[clientConnections objectAtIndex:i] clientSocket] isEqual:newSocket]) + return [[clientConnections objectAtIndex:i] runLoop]; + } + } + return [NSRunLoop currentRunLoop]; +} +#endif +- (void)onSocket:(AsyncSocket *)sock didAcceptNewSocket:(AsyncSocket *)newSocket { + if (clientClass==[MGMHTTPClient class]) { + if ([delegate respondsToSelector:@selector(httpClientClass)]) { + clientClass = [delegate httpClientClass]; + } + } + MGMHTTPClient *theClient = [clientClass clientWithSocket:newSocket server:self]; + @synchronized(clientConnections) { + [clientConnections addObject:theClient]; + } +} +- (void)clientDisconected:(NSNotification *)theNotification { + @synchronized(clientConnections) { + [clientConnections removeObject:[theNotification object]]; + } +} +@end \ No newline at end of file diff --git a/EmailScheduler/MGMHTTPClientClass.h b/EmailScheduler/MGMHTTPClientClass.h new file mode 100644 index 0000000..b2c137e --- /dev/null +++ b/EmailScheduler/MGMHTTPClientClass.h @@ -0,0 +1,34 @@ +// +// MGMHTTPClientClass.h +// EmailScheduler +// +// Created by James Coleman on 9/13/14. +// Copyright (c) 2014 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import +#import "MGMHTTP/MGMHTTPClient.h" + +@interface MGMHTTPClientClass : MGMHTTPClient { + +} + +@end diff --git a/EmailScheduler/MGMHTTPClientClass.m b/EmailScheduler/MGMHTTPClientClass.m new file mode 100644 index 0000000..14d3145 --- /dev/null +++ b/EmailScheduler/MGMHTTPClientClass.m @@ -0,0 +1,87 @@ +// +// MGMHTTPClientClass.m +// EmailScheduler +// +// Created by James Coleman on 9/13/14. +// Copyright (c) 2014 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import "MGMHTTPClientClass.h" +#import "MGMController.h" +#import "MGMJSON.h" +#import "MGMEmail.h" +#import + +@implementation MGMHTTPClientClass +- (void)replyToClient { + MGMController *controller = [MGMController sharedController]; + NSString *user = [self requestWithName:@"user"]; + NSString *fromEmail = [self requestWithName:@"from"]; + NSString *fromName = [self requestWithName:@"from-name"]; + NSString *toEmail = [self requestWithName:@"to"]; + NSString *toName = [self requestWithName:@"to-name"]; + NSString *subject = [self requestWithName:@"subject"]; + NSString *message = [self requestWithName:@"message"]; + NSString *messageHTML = [self requestWithName:@"message-html"]; + NSString *additionalHeadersString = [self requestWithName:@"headers"]; + + if (fromEmail!=nil && ![fromEmail isEqual:@""] && toEmail!=nil && ![toEmail isEqual:@""] && subject!=nil && ![subject isEqual:@""] && message!=nil && ![message isEqual:@""]) { + if ([[controller emailAddresses] objectForKey:(user!=nil && ![user isEqual:@""] ? user : fromEmail)]==nil) { + NSDictionary *response = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], @"success", [NSString stringWithFormat:@"No handler for email address %@", fromEmail], @"error", nil]; + [self print:[response JSONValue]]; + } else { + MCOMessageBuilder *builder = [[MCOMessageBuilder alloc] init]; + MCOAddress *from = [MCOAddress addressWithDisplayName:fromName mailbox:fromEmail]; + MCOAddress *to = [MCOAddress addressWithDisplayName:toName mailbox:toEmail]; + [[builder header] setFrom:from]; + [[builder header] setTo:@[to]]; + [[builder header] setSubject:subject]; + [[builder header] setUserAgent:@"MGMEmail/0.1"]; + if (messageHTML!=nil && ![messageHTML isEqual:@""]) { + [builder setHTMLBody:messageHTML]; + } + [builder setTextBody:message]; + + NSDictionary *additionalHeaders = (NSDictionary *)[additionalHeadersString parseJSON]; + if (additionalHeaders!=nil && [additionalHeaders isKindOfClass:[NSDictionary class]]) { + NSArray *keys = [additionalHeaders allKeys]; + for (unsigned int i=0; i<[keys count]; i++) { + [[builder header] setExtraHeaderValue:[additionalHeaders objectForKey:[keys objectAtIndex:i]] forName:[keys objectAtIndex:i]]; + } + } + + NSData *rfc822Data = [builder data]; + MGMEmail *email = [[MGMEmail new] autorelease]; + [email setEmailAddress:(user!=nil && ![user isEqual:@""] ? user : fromEmail)]; + [email setRFC822Data:rfc822Data]; + [controller addToQueue:email]; + + NSDictionary *response = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], @"success", nil]; + [self print:[response JSONValue]]; + } + } else { + NSDictionary *response = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], @"success", @"Invalid input", @"error", nil]; + [self print:[response JSONValue]]; + } + + [super replyToClient]; +} +@end diff --git a/EmailScheduler/main.m b/EmailScheduler/main.m new file mode 100644 index 0000000..d28f23a --- /dev/null +++ b/EmailScheduler/main.m @@ -0,0 +1,38 @@ +// +// main.m +// EmailScheduler +// +// Created by James Coleman on 9/13/14. +// Copyright (c) 2014 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/ +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import +#import "MGMController.h" + +int main(int argc, const char * argv[]) { + @autoreleasepool { + MGMController *controller = [[MGMController alloc] init]; + [[NSRunLoop currentRunLoop] run]; + [controller release]; + } + return 0; +} + diff --git a/MailCore.framework/Headers b/MailCore.framework/Headers new file mode 120000 index 0000000..a177d2a --- /dev/null +++ b/MailCore.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/MailCore.framework/MailCore b/MailCore.framework/MailCore new file mode 120000 index 0000000..6bc6fda --- /dev/null +++ b/MailCore.framework/MailCore @@ -0,0 +1 @@ +Versions/Current/MailCore \ No newline at end of file diff --git a/MailCore.framework/Resources b/MailCore.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/MailCore.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/MailCore.framework/Versions/A/Headers/MCAbstract.h b/MailCore.framework/Versions/A/Headers/MCAbstract.h new file mode 100644 index 0000000..03299ec --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCAbstract.h @@ -0,0 +1,13 @@ +#ifndef MAILCORE_MCABSTRACT_H + +#define MAILCORE_MCABSTRACT_H + +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCAbstractMessage.h b/MailCore.framework/Versions/A/Headers/MCAbstractMessage.h new file mode 100644 index 0000000..b03d5f2 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCAbstractMessage.h @@ -0,0 +1,46 @@ +#ifndef MAILCORE_MCABSTRACTMESSAGE_H + +#define MAILCORE_MCABSTRACTMESSAGE_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class AbstractPart; + class MessageHeader; + + class AbstractMessage : public Object { + public: + AbstractMessage(); + virtual ~AbstractMessage(); + + virtual MessageHeader * header(); + virtual void setHeader(MessageHeader * header); + + virtual AbstractPart * partForContentID(String * contentID); + virtual AbstractPart * partForUniqueID(String * uniqueID); + + virtual Array * /* AbstractPart */ attachments(); + virtual Array * /* AbstractPart */ htmlInlineAttachments(); + virtual Array * /* AbstractPart */ requiredPartsForRendering(); + + public: //subclass behavior + AbstractMessage(AbstractMessage * other); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * hashmap); + + private: + MessageHeader * mHeader; + void init(); + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCAbstractMessagePart.h b/MailCore.framework/Versions/A/Headers/MCAbstractMessagePart.h new file mode 100644 index 0000000..1df6459 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCAbstractMessagePart.h @@ -0,0 +1,45 @@ +#ifndef MAILCORE_MCABSTRACTMESSAGEPART_H + +#define MAILCORE_MCABSTRACTMESSAGEPART_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MessageHeader; + + class AbstractMessagePart : public AbstractPart { + public: + AbstractMessagePart(); + virtual ~AbstractMessagePart(); + + virtual MessageHeader * header(); + virtual void setHeader(MessageHeader * header); + + virtual AbstractPart * mainPart(); + virtual void setMainPart(AbstractPart * mainPart); + + public: //subclass behavior + AbstractMessagePart(AbstractMessagePart * other); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + virtual AbstractPart * partForContentID(String * contentID); + virtual AbstractPart * partForUniqueID(String * uniqueID); + + private: + AbstractPart * mMainPart; + MessageHeader * mHeader; + void init(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCAbstractMultipart.h b/MailCore.framework/Versions/A/Headers/MCAbstractMultipart.h new file mode 100644 index 0000000..c2a07be --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCAbstractMultipart.h @@ -0,0 +1,39 @@ +#ifndef MAILCORE_MCABSTRACTMULTIPART_H + +#define MAILCORE_MCABSTRACTMULTIPART_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class AbstractMultipart : public AbstractPart { + public: + AbstractMultipart(); + virtual ~AbstractMultipart(); + + virtual Array * parts(); + virtual void setParts(Array * parts); + + public: //subclass behavior + AbstractMultipart(AbstractMultipart * other); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + virtual AbstractPart * partForContentID(String * contentID); + virtual AbstractPart * partForUniqueID(String * uniqueID); + + private: + Array * mParts; + void init(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCAbstractPart.h b/MailCore.framework/Versions/A/Headers/MCAbstractPart.h new file mode 100644 index 0000000..7f64120 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCAbstractPart.h @@ -0,0 +1,80 @@ +#ifndef MAILCORE_MCABSTRACTPART_H + +#define MAILCORE_MCABSTRACTPART_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class AbstractMessage; + + class AbstractPart : public Object { + public: + AbstractPart(); + virtual ~AbstractPart(); + + virtual PartType partType(); + virtual void setPartType(PartType type); + + virtual String * filename(); + virtual void setFilename(String * filename); + + virtual String * mimeType(); + virtual void setMimeType(String * mimeType); + + virtual String * charset(); + virtual void setCharset(String * charset); + + virtual String * uniqueID(); + virtual void setUniqueID(String * uniqueID); + + virtual String * contentID(); + virtual void setContentID(String * contentID); + + virtual String * contentLocation(); + virtual void setContentLocation(String * contentLocation); + + virtual String * contentDescription(); + virtual void setContentDescription(String * contentDescription); + + virtual bool isInlineAttachment(); + virtual void setInlineAttachment(bool inlineAttachment); + + virtual AbstractPart * partForContentID(String * contentID); + virtual AbstractPart * partForUniqueID(String * uniqueID); + + virtual String * decodedStringForData(Data * data); + + public: // subclass behavior + AbstractPart(AbstractPart * other); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + public: // private + virtual void importIMAPFields(struct mailimap_body_fields * fields, + struct mailimap_body_ext_1part * extension); + virtual void applyUniquePartID(); + + private: + String * mUniqueID; + String * mFilename; + String * mMimeType; + String * mCharset; + String * mContentID; + String * mContentLocation; + String * mContentDescription; + bool mInlineAttachment; + PartType mPartType; + void init(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCAddress.h b/MailCore.framework/Versions/A/Headers/MCAddress.h new file mode 100644 index 0000000..c55efe5 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCAddress.h @@ -0,0 +1,65 @@ +#ifndef MAILCORE_MCADDRESS_H + +#define MAILCORE_MCADDRESS_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Address : public Object { + public: + Address(); + virtual ~Address(); + + static Address * addressWithDisplayName(String * displayName, String * mailbox); + static Address * addressWithMailbox(String * mailbox); + static Address * addressWithRFC822String(String * RFC822String); + static Address * addressWithNonEncodedRFC822String(String * nonEncodedRFC822String); + + static Array * addressesWithRFC822String(String * string); + static Array * addressesWithNonEncodedRFC822String(String * string); + + static String * RFC822StringForAddresses(Array * addresses); + static String * nonEncodedRFC822StringForAddresses(Array * addresses); + + virtual void setDisplayName(String * displayName); + virtual String * displayName(); + + virtual void setMailbox(String * address); + virtual String * mailbox(); + + virtual String * RFC822String(); + virtual String * nonEncodedRFC822String(); + + public: // subclass behavior. + Address(Address * other); + virtual String * description(); + virtual bool isEqual(Object * otherObject); + virtual unsigned int hash(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + public: // private + // Must be released + virtual struct mailimf_address * createIMFAddress(); + virtual struct mailimf_mailbox * createIMFMailbox(); + + // Additions + static Address * addressWithIMFMailbox(struct mailimf_mailbox * mb); + static Address * addressWithNonEncodedIMFMailbox(struct mailimf_mailbox * mb); + static Address * addressWithIMAPAddress(struct mailimap_address * imap_addr); + + private: + String * mDisplayName; + String * mMailbox; + void init(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCAddressDisplay.h b/MailCore.framework/Versions/A/Headers/MCAddressDisplay.h new file mode 100644 index 0000000..0282a52 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCAddressDisplay.h @@ -0,0 +1,34 @@ +// +// MCAddressDisplay.h +// testUI +// +// Created by DINH Viêt Hoà on 1/27/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCADDRESSDISPLAY_H + +#define MAILCORE_MCADDRESSDISPLAY_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class AddressDisplay { + public: + static String * displayStringForAddress(Address * address); + static String * shortDisplayStringForAddress(Address * address); + static String * veryShortDisplayStringForAddress(Address * address); + + static String * displayStringForAddresses(Array * /* Address */ addresses); + static String * shortDisplayStringForAddresses(Array * /* Address */ addresses); + static String * veryShortDisplayStringForAddresses(Array * /* Address */ addresses); + }; + +}; + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCArray.h b/MailCore.framework/Versions/A/Headers/MCArray.h new file mode 100644 index 0000000..82e9760 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCArray.h @@ -0,0 +1,58 @@ +#ifndef MAILCORE_MCARRAY_H + +#define MAILCORE_MCARRAY_H + +#include + +#ifdef __cplusplus + +typedef struct carray_s carray; + +namespace mailcore { + + class String; + + class Array : public Object { + public: + Array(); + virtual ~Array(); + + static Array * array(); + static Array * arrayWithObject(Object * obj); + + virtual unsigned int count(); + virtual void addObject(Object * obj); + virtual void removeObjectAtIndex(unsigned int idx); + virtual void removeObject(Object * obj); + virtual int indexOfObject(Object * obj); + virtual Object * objectAtIndex(unsigned int idx); + virtual void replaceObject(unsigned int idx, Object * obj); + virtual void insertObject(unsigned int idx, Object * obj); + virtual void removeAllObjects(); + + virtual void addObjectsFromArray(Array * array); + virtual Object * lastObject(); + virtual void removeLastObject(); + virtual bool containsObject(Object * obj); + + virtual Array * sortedArray(int (* compare)(void * a, void * b, void * context), void * context); + virtual void sortArray(int (* compare)(void * a, void * b, void * context), void * context); + virtual String * componentsJoinedByString(String * delimiter); + + public: // subclass behavior + Array(Array * o); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + private: + carray * mArray; + void init(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCAssert.h b/MailCore.framework/Versions/A/Headers/MCAssert.h new file mode 100644 index 0000000..4584aa0 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCAssert.h @@ -0,0 +1,15 @@ +#ifndef MAILCORE_MCASSERT_H + +#define MAILCORE_MCASSERT_H + +#define MCAssert(cond) MCAssertInternal(__FILE__, __LINE__, cond, #cond) + +#ifdef __cplusplus +extern "C" { +#endif + void MCAssertInternal(const char * filename, unsigned int line, int cond, const char * condString); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCAsync.h b/MailCore.framework/Versions/A/Headers/MCAsync.h new file mode 100644 index 0000000..90b3e26 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCAsync.h @@ -0,0 +1,18 @@ +// +// MCAsync.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/11/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCASYNC_H + +#define MAILCORE_MCASYNC_H + +#include +#include +#include +#include + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCAsyncIMAP.h b/MailCore.framework/Versions/A/Headers/MCAsyncIMAP.h new file mode 100755 index 0000000..da032c7 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCAsyncIMAP.h @@ -0,0 +1,35 @@ +// +// MCAsyncIMAP.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCASYNCIMAP_H + +#define MAILCORE_MCASYNCIMAP_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCAsyncNNTP.h b/MailCore.framework/Versions/A/Headers/MCAsyncNNTP.h new file mode 100644 index 0000000..56509ff --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCAsyncNNTP.h @@ -0,0 +1,21 @@ +// +// MCAsyncNNTP.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCASYNCNNTP_H + +#define MAILCORE_MCASYNCNNTP_H + +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCAsyncPOP.h b/MailCore.framework/Versions/A/Headers/MCAsyncPOP.h new file mode 100644 index 0000000..7974031 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCAsyncPOP.h @@ -0,0 +1,20 @@ +// +// MCAsyncPOP.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCASYNCPOP_H + +#define MAILCORE_MCASYNCPOP_H + +#include +#include +#include +#include +#include +#include + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCAsyncSMTP.h b/MailCore.framework/Versions/A/Headers/MCAsyncSMTP.h new file mode 100644 index 0000000..d7bac9d --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCAsyncSMTP.h @@ -0,0 +1,17 @@ +// +// MCAsyncSMTP.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/11/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCASYNCSMTP_H + +#define MAILCORE_MCASYNCSMTP_H + +#include +#include +#include + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCAttachment.h b/MailCore.framework/Versions/A/Headers/MCAttachment.h new file mode 100644 index 0000000..069688f --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCAttachment.h @@ -0,0 +1,63 @@ +#ifndef MAILCORE_MCATTACHMENT_H + +#define MAILCORE_MCATTACHMENT_H + +#include +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MessagePart; + + class Attachment : public AbstractPart { + public: + static String * mimeTypeForFilename(String * filename); + static Attachment * attachmentWithContentsOfFile(String * filename); + static Attachment * attachmentWithData(String * filename, Data * data); + static Attachment * attachmentWithHTMLString(String * htmlString); + static Attachment * attachmentWithRFC822Message(Data * messageData); + static Attachment * attachmentWithText(String * text); + + Attachment(); + virtual ~Attachment(); + + virtual void setData(Data * data); + virtual Data * data(); + virtual String * decodedString(); + + virtual void setContentTypeParameter(String * name, String * value); + virtual void removeContentTypeParameter(String * name); + virtual String * contentTypeParameterValueForName(String *name); + virtual Array * allContentTypeParametersNames(); + + public: // subclass behavior + Attachment(Attachment * other); + virtual String * description(); + virtual Object * copy(); + + public: // private + static AbstractPart * attachmentsWithMIME(struct mailmime * mime); + + private: + Data * mData; + HashMap * mContentTypeParameters; + HashMap * mlcContentTypeParameters; + void init(); + static void fillMultipartSubAttachments(AbstractMultipart * multipart, struct mailmime * mime); + static AbstractPart * attachmentsWithMIMEWithMain(struct mailmime * mime, bool isMain); + static Attachment * attachmentWithSingleMIME(struct mailmime * mime); + static MessagePart * attachmentWithMessageMIME(struct mailmime * mime); + static Encoding encodingForMIMEEncoding(struct mailmime_mechanism * mechanism, int defaultMimeEncoding); + static HashMap * readMimeTypesFile(String * filename); + void setContentTypeParameters(HashMap * parameters); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCAutoreleasePool.h b/MailCore.framework/Versions/A/Headers/MCAutoreleasePool.h new file mode 100644 index 0000000..f987fd0 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCAutoreleasePool.h @@ -0,0 +1,44 @@ +#ifndef MAILCORE_MCAUTORELEASEPOOL_H + +#define MAILCORE_MCAUTORELEASEPOOL_H + +#include +#include + +#ifdef __cplusplus + +typedef struct carray_s carray; + +namespace mailcore { + + class AutoreleasePool : public Object { + public: + AutoreleasePool(); + virtual ~AutoreleasePool(); + + static void autorelease(Object * obj); + + public: // subclass behavior + virtual String * description(); + + private: + static void init(); + static pthread_key_t autoreleasePoolStackKey; + carray * mPoolObjects; + static carray * createAutoreleasePoolStackIfNeeded(); + static void destroyAutoreleasePoolStack(void *); + static void initAutoreleasePoolStackKey(); + static AutoreleasePool * currentAutoreleasePool(); + virtual void add(Object * obj); +#ifdef __APPLE__ + void * mAppleAutoreleasePool; + static void * createAppleAutoreleasePool(); + static void releaseAppleAutoreleasePool(void * appleAutoreleasePool); +#endif + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCBaseTypes.h b/MailCore.framework/Versions/A/Headers/MCBaseTypes.h new file mode 100644 index 0000000..ce3e115 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCBaseTypes.h @@ -0,0 +1,30 @@ +#ifndef MAILCORE_MCBASETYPES_H + +#define MAILCORE_MCBASETYPES_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCConnectionLogger.h b/MailCore.framework/Versions/A/Headers/MCConnectionLogger.h new file mode 100644 index 0000000..4e2249f --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCConnectionLogger.h @@ -0,0 +1,45 @@ +// +// MCConnectionLogger.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 6/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_CONNECTION_LOGGER_H + +#define MAILCORE_CONNECTION_LOGGER_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Data; + + enum ConnectionLogType { + // Received data + ConnectionLogTypeReceived, + // Sent data + ConnectionLogTypeSent, + // Sent private data + ConnectionLogTypeSentPrivate, + // Parse error + ConnectionLogTypeErrorParse, + // Error while receiving data - log() is called with a NULL buffer. + ConnectionLogTypeErrorReceived, + // Error while sending data - log() is called with a NULL buffer. + ConnectionLogTypeErrorSent, + }; + + class ConnectionLogger { + public: + virtual void log(void * sender, ConnectionLogType logType, Data * buffer) {} + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCCore.h b/MailCore.framework/Versions/A/Headers/MCCore.h new file mode 100644 index 0000000..323bb60 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCCore.h @@ -0,0 +1,23 @@ +// +// Core.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/10/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCCORE_H + +#define MAILCORE_MCCORE_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCData.h b/MailCore.framework/Versions/A/Headers/MCData.h new file mode 100644 index 0000000..6ba056e --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCData.h @@ -0,0 +1,68 @@ +#ifndef MAILCORE_MCDATA_H + +#define MAILCORE_MCDATA_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class String; + + class Data : public Object { + public: + Data(); + Data(int capacity); + Data(const char * bytes, unsigned int length); + virtual ~Data(); + + static Data * data(); + static Data * dataWithCapacity(int capacity); + static Data * dataWithContentsOfFile(String * filename); + static Data * dataWithBytes(const char * bytes, unsigned int length); + + virtual char * bytes(); + virtual unsigned int length(); + + virtual void appendData(Data * otherData); + virtual void appendBytes(const char * bytes, unsigned int length); + virtual void setBytes(const char * bytes, unsigned int length); + virtual void setData(Data * otherData); + + // Helpers + virtual String * stringWithDetectedCharset(); + virtual String * stringWithDetectedCharset(String * charset, bool isHTML); + virtual String * stringWithCharset(const char * charset); + virtual Data * decodedDataUsingEncoding(Encoding encoding); + + virtual String * base64String(); + + public: // private + virtual String * charsetWithFilteredHTML(bool filterHTML, String * hintCharset = NULL); + + public: // subclass behavior + Data(Data * otherData); + virtual String * description(); + virtual Object * copy(); + virtual bool isEqual(Object * otherObject); + virtual unsigned int hash(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + private: + char * mBytes; + unsigned int mLength; + unsigned int mAllocated; + void allocate(unsigned int length); + void reset(); + String * charsetWithFilteredHTMLWithoutHint(bool filterHTML); + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCDateFormatter.h b/MailCore.framework/Versions/A/Headers/MCDateFormatter.h new file mode 100644 index 0000000..c4e21c0 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCDateFormatter.h @@ -0,0 +1,75 @@ +// +// MCDateFormatter.h +// testUI +// +// Created by DINH Viêt Hoà on 1/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCDATEFORMATTER_H + +#define MAILCORE_MCDATEFORMATTER_H + +#include + +// predeclare UDateFormat +// copied from +typedef void * UDateFormat; + +#ifdef __cplusplus + +namespace mailcore { + + class String; + + // Uses same values as UDateFormatStyle + enum DateFormatStyle { + DateFormatStyleFull = 0 /* UDAT_FULL*/, + DateFormatStyleLong = 1 /* UDAT_LONG */, + DateFormatStyleMedium = 2 /* UDAT_MEDIUM */, + DateFormatStyleShort = 3 /* UDAT_SHORT */, + DateFormatStyleNone = -1 /* UDAT_NONE */, + }; + + class DateFormatter : public Object { + public: + DateFormatter(); + virtual ~DateFormatter(); + + static DateFormatter * dateFormatter(); + + virtual void setDateStyle(DateFormatStyle style); + virtual DateFormatStyle dateStyle(); + + virtual void setTimeStyle(DateFormatStyle style); + virtual DateFormatStyle timeStyle(); + + virtual void setLocale(String * locale); + virtual String * locale(); + + virtual void setTimezone(String * timezone); + virtual String * timezone(); + + virtual void setDateFormat(String * dateFormat); + virtual String * dateFormat(); + + virtual String * stringFromDate(time_t date); + virtual time_t dateFromString(String * dateString); + + private: + UDateFormat * mDateFormatter; + DateFormatStyle mDateStyle; + DateFormatStyle mTimeStyle; + String * mDateFormat; + String * mTimezone; + String * mLocale; + void * mAppleDateFormatter; + + void prepare(); + }; + +} + +#endif + +#endif /* defined(__testUI__MCDateFormatter__) */ diff --git a/MailCore.framework/Versions/A/Headers/MCHTMLRendererCallback.h b/MailCore.framework/Versions/A/Headers/MCHTMLRendererCallback.h new file mode 100644 index 0000000..030b691 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCHTMLRendererCallback.h @@ -0,0 +1,61 @@ +// +// MCHTMLRendererCallback.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 2/2/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCHTMLRENDERERCALLBACK_H + +#define MAILCORE_MCHTMLRENDERERCALLBACK_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MessageParser; + + class HTMLRendererIMAPCallback { + public: + HTMLRendererIMAPCallback() {} + virtual ~HTMLRendererIMAPCallback() {} + + virtual Data * dataForIMAPPart(String * folder, IMAPPart * part) { return NULL; } + virtual void prefetchAttachmentIMAPPart(String * folder, IMAPPart * part) {} + virtual void prefetchImageIMAPPart(String * folder, IMAPPart * part) {} + }; + + class HTMLRendererTemplateCallback { + public: + virtual bool canPreviewPart(AbstractPart * part); + virtual bool shouldShowPart(AbstractPart * part); + + virtual HashMap * templateValuesForHeader(MessageHeader * header); + virtual HashMap * templateValuesForPart(AbstractPart * part); + + virtual String * templateForMainHeader(MessageHeader * header); + virtual String * templateForImage(AbstractPart * part); + virtual String * templateForAttachment(AbstractPart * part); + virtual String * templateForMessage(AbstractMessage * message); + virtual String * templateForEmbeddedMessage(AbstractMessagePart * part); + virtual String * templateForEmbeddedMessageHeader(MessageHeader * header); + virtual String * templateForAttachmentSeparator(); + + virtual String * cleanHTMLForPart(String * html); + + // Can be used to filter some HTML tags. + virtual String * filterHTMLForPart(String * html); + + // Can be used to hide quoted text. + virtual String * filterHTMLForMessage(String * html); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCHash.h b/MailCore.framework/Versions/A/Headers/MCHash.h new file mode 100644 index 0000000..5ef0c29 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCHash.h @@ -0,0 +1,15 @@ +#ifndef MAILCORE_MCHASH_H + +#define MAILCORE_MCHASH_H + +#ifdef __cplusplus + +namespace mailcore { + + unsigned int hashCompute(const char * key, unsigned int len); + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCHashMap.h b/MailCore.framework/Versions/A/Headers/MCHashMap.h new file mode 100644 index 0000000..ea533df --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCHashMap.h @@ -0,0 +1,52 @@ +#ifndef MAILCORE_MCHASHMAP_H + +#define MAILCORE_MCHASHMAP_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class String; + class Array; + struct HashMapCell; + typedef HashMapCell HashMapIter; + + class HashMap : public Object { + public: + HashMap(); + virtual ~HashMap(); + + static HashMap * hashMap(); + + virtual unsigned int count(); + virtual void setObjectForKey(Object * key, Object * value); + virtual void removeObjectForKey(Object * key); + virtual Object * objectForKey(Object * key); + virtual Array * allKeys(); + virtual Array * allValues(); + virtual void removeAllObjects(); + + public: // subclass behavior + HashMap(HashMap * o); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + private: + unsigned int mAllocated; + unsigned int mCount; + void ** mCells; + HashMapIter * iteratorBegin(); + HashMapIter * iteratorNext(HashMapIter * iter); + void allocate(unsigned int size); + void init(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCICUTypes.h b/MailCore.framework/Versions/A/Headers/MCICUTypes.h new file mode 100644 index 0000000..5b43c5d --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCICUTypes.h @@ -0,0 +1,19 @@ +// +// MCICUTypes.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 4/18/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCICUTYPES_H + +#define MAILCORE_MCICUTYPES_H + +#if defined(__CHAR16_TYPE__) +typedef __CHAR16_TYPE__ UChar; +#else +typedef uint16_t UChar; +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAP.h b/MailCore.framework/Versions/A/Headers/MCIMAP.h new file mode 100644 index 0000000..6e80995 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAP.h @@ -0,0 +1,19 @@ +#ifndef MAILCORE_MCIMAP_H + +#define MAILCORE_MCIMAP_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPAppendMessageOperation.h b/MailCore.framework/Versions/A/Headers/MCIMAPAppendMessageOperation.h new file mode 100644 index 0000000..463d65d --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPAppendMessageOperation.h @@ -0,0 +1,55 @@ +// +// MCIMAPAppendMessageOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPAPPENDMESSAGEOPERATION_H + +#define MAILCORE_MCIMAPAPPENDMESSAGEOPERATION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPAppendMessageOperation : public IMAPOperation { + public: + IMAPAppendMessageOperation(); + virtual ~IMAPAppendMessageOperation(); + + virtual void setMessageData(Data * messageData); + virtual Data * messageData(); + + virtual void setFlags(MessageFlag flags); + virtual MessageFlag flags(); + + virtual void setCustomFlags(Array * customFlags); + virtual Array * customFlags(); + + virtual void setDate(time_t date); + virtual time_t date(); + + virtual uint32_t createdUID(); + + public: // subclass behavior + virtual void main(); + + private: + Data * mMessageData; + MessageFlag mFlags; + Array * mCustomFlags; + time_t mDate; + uint32_t mCreatedUID; + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPAsyncSession.h b/MailCore.framework/Versions/A/Headers/MCIMAPAsyncSession.h new file mode 100755 index 0000000..333783b --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPAsyncSession.h @@ -0,0 +1,206 @@ +// +// MCIMAPAccount.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/17/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPACCOUNT_H + +#define MAILCORE_MCIMAPACCOUNT_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPOperation; + class IMAPFetchFoldersOperation; + class IMAPAppendMessageOperation; + class IMAPCopyMessagesOperation; + class IMAPFetchMessagesOperation; + class IMAPFetchContentOperation; + class IMAPIdleOperation; + class IMAPFolderInfoOperation; + class IMAPFolderStatusOperation; + class IMAPNamespace; + class IMAPSearchOperation; + class IMAPSearchExpression; + class IMAPFetchNamespaceOperation; + class IMAPIdentityOperation; + class IMAPAsyncConnection; + class IMAPCapabilityOperation; + class IMAPQuotaOperation; + class IMAPMessageRenderingOperation; + class IMAPMessage; + class IMAPSession; + class IMAPIdentity; + class OperationQueueCallback; + + class IMAPAsyncSession : public Object { + public: + IMAPAsyncSession(); + virtual ~IMAPAsyncSession(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * username); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + + // To authenticate using OAuth2, username and oauth2token should be set. + // auth type to use is AuthTypeOAuth2. + virtual void setOAuth2Token(String * token); + virtual String * OAuth2Token(); + + virtual void setAuthType(AuthType authType); + virtual AuthType authType(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void setVoIPEnabled(bool enabled); + virtual bool isVoIPEnabled(); + + virtual void setDefaultNamespace(IMAPNamespace * ns); + virtual IMAPNamespace * defaultNamespace(); + + virtual void setAllowsFolderConcurrentAccessEnabled(bool enabled); + virtual bool allowsFolderConcurrentAccessEnabled(); + + virtual void setMaximumConnections(unsigned int maxConnections); + virtual unsigned int maximumConnections(); + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + +#ifdef __APPLE__ + 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 IMAPIdentity * serverIdentity(); + virtual IMAPIdentity * clientIdentity(); + virtual String * gmailUserDisplayName(); + + virtual IMAPFolderInfoOperation * folderInfoOperation(String * folder); + virtual IMAPFolderStatusOperation * folderStatusOperation(String * folder); + + virtual IMAPFetchFoldersOperation * fetchSubscribedFoldersOperation(); + virtual IMAPFetchFoldersOperation * fetchAllFoldersOperation(); + + virtual IMAPOperation * renameFolderOperation(String * folder, String * otherName); + virtual IMAPOperation * deleteFolderOperation(String * folder); + virtual IMAPOperation * createFolderOperation(String * folder); + + virtual IMAPOperation * subscribeFolderOperation(String * folder); + virtual IMAPOperation * unsubscribeFolderOperation(String * folder); + + virtual IMAPAppendMessageOperation * appendMessageOperation(String * folder, Data * messageData, MessageFlag flags, Array * customFlags = NULL); + + virtual IMAPCopyMessagesOperation * copyMessagesOperation(String * folder, IndexSet * uids, String * destFolder); + + virtual IMAPOperation * expungeOperation(String * folder); + + virtual IMAPFetchMessagesOperation * fetchMessagesByUIDOperation(String * folder, IMAPMessagesRequestKind requestKind, + IndexSet * indexes); + virtual IMAPFetchMessagesOperation * fetchMessagesByNumberOperation(String * folder, IMAPMessagesRequestKind requestKind, + IndexSet * indexes); + virtual IMAPFetchMessagesOperation * syncMessagesByUID(String * folder, IMAPMessagesRequestKind requestKind, + IndexSet * indexes, uint64_t modSeq); + + virtual IMAPFetchContentOperation * fetchMessageByUIDOperation(String * folder, uint32_t uid, bool urgent = false); + virtual IMAPFetchContentOperation * fetchMessageAttachmentByUIDOperation(String * folder, uint32_t uid, String * partID, + Encoding encoding, bool urgent = false); + + virtual IMAPOperation * storeFlagsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags = NULL); + virtual IMAPOperation * storeLabelsOperation(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, Array * labels); + + virtual IMAPSearchOperation * searchOperation(String * folder, IMAPSearchKind kind, String * searchString); + virtual IMAPSearchOperation * searchOperation(String * folder, IMAPSearchExpression * expression); + + virtual IMAPIdleOperation * idleOperation(String * folder, uint32_t lastKnownUID); + + virtual IMAPFetchNamespaceOperation * fetchNamespaceOperation(); + + virtual IMAPIdentityOperation * identityOperation(IMAPIdentity * identity); + + virtual IMAPOperation * connectOperation(); + virtual IMAPOperation * checkAccountOperation(); + virtual IMAPOperation * disconnectOperation(); + + virtual IMAPCapabilityOperation * capabilityOperation(); + virtual IMAPQuotaOperation * quotaOperation(); + + virtual IMAPOperation * noopOperation(); + + virtual IMAPMessageRenderingOperation * htmlRenderingOperation(IMAPMessage * message, String * folder); + virtual IMAPMessageRenderingOperation * htmlBodyRenderingOperation(IMAPMessage * message, String * folder); + virtual IMAPMessageRenderingOperation * plainTextRenderingOperation(IMAPMessage * message, String * folder); + virtual IMAPMessageRenderingOperation * plainTextBodyRenderingOperation(IMAPMessage * message, String * folder, bool stripWhitespace); + + public: // private + virtual void automaticConfigurationDone(IMAPSession * session); + virtual void operationRunningStateChanged(); + virtual IMAPAsyncConnection * sessionForFolder(String * folder, bool urgent = false); + + private: + Array * mSessions; + + String * mHostname; + unsigned int mPort; + String * mUsername; + String * mPassword; + String * mOAuth2Token; + AuthType mAuthType; + ConnectionType mConnectionType; + bool mCheckCertificateEnabled; + bool mVoIPEnabled; + IMAPNamespace * mDefaultNamespace; + time_t mTimeout; + bool mAllowsFolderConcurrentAccessEnabled; + unsigned int mMaximumConnections; + ConnectionLogger * mConnectionLogger; + bool mAutomaticConfigurationDone; + IMAPIdentity * mServerIdentity; + IMAPIdentity * mClientIdentity; + bool mQueueRunning; + OperationQueueCallback * mOperationQueueCallback; +#if __APPLE__ + dispatch_queue_t mDispatchQueue; +#endif + String * mGmailUserDisplayName; + + virtual IMAPAsyncConnection * session(); + virtual IMAPAsyncConnection * matchingSessionForFolder(String * folder); + virtual IMAPAsyncConnection * availableSession(); + virtual IMAPMessageRenderingOperation * renderingOperation(IMAPMessage * message, + String * folder, + IMAPMessageRenderingType type); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPCapabilityOperation.h b/MailCore.framework/Versions/A/Headers/MCIMAPCapabilityOperation.h new file mode 100644 index 0000000..b205bd8 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPCapabilityOperation.h @@ -0,0 +1,38 @@ +// +// MCIMAPCapabilityOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/4/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPCAPABILITYOPERATION_H + +#define MAILCORE_MCIMAPCAPABILITYOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPCapabilityOperation : public IMAPOperation { + public: + IMAPCapabilityOperation(); + virtual ~IMAPCapabilityOperation(); + + // Result. + virtual IndexSet * capabilities(); + + public: // subclass behavior + virtual void main(); + + private: + IndexSet * mCapabilities; + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPConnectOperation.h b/MailCore.framework/Versions/A/Headers/MCIMAPConnectOperation.h new file mode 100644 index 0000000..f48247e --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPConnectOperation.h @@ -0,0 +1,28 @@ +// +// MCIMAPConnectOperation.h +// mailcore2 +// +// Created by Ryan Walklin on 6/09/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPCONNECTOPERATION_H + +#define MAILCORE_MCIMAPCONNECTOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPConnectOperation : public IMAPOperation { + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif /* defined(__MAILCORE_MCIMAPCONNECTOPERATION_H_) */ diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPCopyMessagesOperation.h b/MailCore.framework/Versions/A/Headers/MCIMAPCopyMessagesOperation.h new file mode 100644 index 0000000..a4b5d54 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPCopyMessagesOperation.h @@ -0,0 +1,46 @@ +// +// MCIMAPCopyMessagesOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPCOPYMESSAGESOPERATION_H + +#define MAILCORE_MCIMAPCOPYMESSAGESOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPCopyMessagesOperation : public IMAPOperation { + public: + IMAPCopyMessagesOperation(); + virtual ~IMAPCopyMessagesOperation(); + + virtual void setDestFolder(String * destFolder); + virtual String * destFolder(); + + virtual void setUids(IndexSet * uids); + virtual IndexSet * uids(); + + // Result. + virtual HashMap * uidMapping(); + + public: // subclass behavior + virtual void main(); + + private: + IndexSet * mUids; + String * mDestFolder; + HashMap * mUidMapping; + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPFetchContentOperation.h b/MailCore.framework/Versions/A/Headers/MCIMAPFetchContentOperation.h new file mode 100644 index 0000000..3d4dd17 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPFetchContentOperation.h @@ -0,0 +1,51 @@ +// +// IMAPFetchContentOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_IMAPFETCHCONTENTOPERATION_H + +#define MAILCORE_IMAPFETCHCONTENTOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPFetchContentOperation : public IMAPOperation { + public: + IMAPFetchContentOperation(); + virtual ~IMAPFetchContentOperation(); + + virtual void setUid(uint32_t uid); + virtual uint32_t uid(); + + virtual void setPartID(String * partID); + virtual String * partID(); + + virtual void setEncoding(Encoding encoding); + virtual Encoding encoding(); + + // Result. + virtual Data * data(); + + public: // subclass behavior + virtual void main(); + + private: + uint32_t mUid; + String * mPartID; + Encoding mEncoding; + Data * mData; + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPFetchFoldersOperation.h b/MailCore.framework/Versions/A/Headers/MCIMAPFetchFoldersOperation.h new file mode 100644 index 0000000..8335154 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPFetchFoldersOperation.h @@ -0,0 +1,44 @@ +// +// MCIMAPFetchFoldersOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPFETCHFOLDERSOPERATION_H + +#define MAILCORE_MCIMAPFETCHFOLDERSOPERATION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPFetchFoldersOperation : public IMAPOperation { + public: + IMAPFetchFoldersOperation(); + virtual ~IMAPFetchFoldersOperation(); + + virtual void setFetchSubscribedEnabled(bool enabled); + virtual bool isFetchSubscribedEnabled(); + + // Result. + virtual Array * /* IMAPFolder */ folders(); + + public: // subclass behavior + virtual void main(); + + private: + bool mFetchSubscribedEnabled; + Array * mFolders; + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPFetchMessagesOperation.h b/MailCore.framework/Versions/A/Headers/MCIMAPFetchMessagesOperation.h new file mode 100644 index 0000000..3183508 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPFetchMessagesOperation.h @@ -0,0 +1,61 @@ +// +// IMAPFetchMessagesOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPFETCHMESSAGESOPERATION_H + +#define MAILCORE_MCIMAPFETCHMESSAGESOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPFetchMessagesOperation : public IMAPOperation { + public: + IMAPFetchMessagesOperation(); + virtual ~IMAPFetchMessagesOperation(); + + virtual void setFetchByUidEnabled(bool enabled); + virtual bool isFetchByUidEnabled(); + + virtual void setIndexes(IndexSet * indexes); + virtual IndexSet * indexes(); + + virtual void setModSequenceValue(uint64_t modseq); + virtual uint64_t modSequenceValue(); + + virtual void setKind(IMAPMessagesRequestKind kind); + virtual IMAPMessagesRequestKind kind(); + + virtual void setExtraHeaders(Array * extraHeaders); + virtual Array * extraHeaders(); + + // Result. + virtual Array * /* IMAPMessage */ messages(); + virtual IndexSet * vanishedMessages(); + + public: // subclass behavior + virtual void main(); + + private: + bool mFetchByUidEnabled; + IndexSet * mIndexes; + IMAPMessagesRequestKind mKind; + Array * /* String */ mExtraHeaders; + Array * /* IMAPMessage */ mMessages; + IndexSet * mVanishedMessages; + uint64_t mModSequenceValue; + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPFetchNamespaceOperation.h b/MailCore.framework/Versions/A/Headers/MCIMAPFetchNamespaceOperation.h new file mode 100644 index 0000000..ae85d9d --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPFetchNamespaceOperation.h @@ -0,0 +1,39 @@ +// +// IMAPFetchNamespaceOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPFETCHNAMESPACEOPERATION_H + +#define MAILCORE_MCIMAPFETCHNAMESPACEOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPFetchNamespaceOperation : public IMAPOperation { + public: + IMAPFetchNamespaceOperation(); + virtual ~IMAPFetchNamespaceOperation(); + + // Result. + virtual HashMap * namespaces(); + + public: // subclass behavior + virtual void main(); + + private: + HashMap * mNamespaces; + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPFolder.h b/MailCore.framework/Versions/A/Headers/MCIMAPFolder.h new file mode 100644 index 0000000..3bc2058 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPFolder.h @@ -0,0 +1,42 @@ +#ifndef MAILCORE_MCIMAPFOLDER_H + +#define MAILCORE_MCIMAPFOLDER_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPFolder : public Object { + public: + IMAPFolder(); + virtual ~IMAPFolder(); + + virtual void setPath(String * path); + virtual String * path(); + + virtual void setDelimiter(char delimiter); + virtual char delimiter(); + + virtual void setFlags(IMAPFolderFlag flags); + virtual IMAPFolderFlag flags(); + + public: // subclass behavior + IMAPFolder(IMAPFolder * other); + virtual Object * copy(); + virtual String * description(); + + private: + String * mPath; + char mDelimiter; + IMAPFolderFlag mFlags; + void init(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPFolderInfoOperation.h b/MailCore.framework/Versions/A/Headers/MCIMAPFolderInfoOperation.h new file mode 100644 index 0000000..b53be2c --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPFolderInfoOperation.h @@ -0,0 +1,49 @@ +// +// MCIMAPFolderInfoOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/13/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPFOLDERINFOOPERATION_H + +#define MAILCORE_MCIMAPFOLDERINFOOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPFolderInfoOperation : public IMAPOperation { + public: + IMAPFolderInfoOperation(); + virtual ~IMAPFolderInfoOperation(); + + virtual uint32_t uidNext(); + virtual uint32_t uidValidity(); + virtual uint64_t modSequenceValue(); + virtual int messageCount(); + virtual uint32_t firstUnseenUid(); + virtual bool allowsNewPermanentFlags(); + + public: // subclass behavior + virtual void main(); + + private: + + uint32_t mUidNext; + uint32_t mUidValidity; + uint64_t mModSequenceValue; + int mMessageCount; + uint32_t mFirstUnseenUid; + bool mAllowsNewPermanentFlags; + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPFolderStatus.h b/MailCore.framework/Versions/A/Headers/MCIMAPFolderStatus.h new file mode 100644 index 0000000..db3243f --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPFolderStatus.h @@ -0,0 +1,64 @@ +// +// MCIMAPFolderStatus.h +// mailcore2 +// +// Created by Sebastian on 6/11/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPFOLDERSTATUS_H + +#define MAILCORE_MCIMAPFOLDERSTATUS_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPFolderStatus : public Object { + public: + IMAPFolderStatus(); + virtual ~IMAPFolderStatus(); + + virtual void setUnseenCount(uint32_t unseen); + virtual uint32_t unseenCount(); + + virtual void setMessageCount(uint32_t messages); + virtual uint32_t messageCount(); + + virtual void setRecentCount(uint32_t recent); + virtual uint32_t recentCount(); + + virtual void setUidNext(uint32_t uidNext); + virtual uint32_t uidNext(); + + virtual void setUidValidity(uint32_t uidValidity); + virtual uint32_t uidValidity(); + + virtual void setHighestModSeqValue(uint64_t highestModSeqValue); + virtual uint64_t highestModSeqValue(); + + public: // subclass behavior + IMAPFolderStatus(IMAPFolderStatus * other); + virtual Object * copy(); + virtual String * description(); + + private: + uint32_t mUnseenCount; + uint32_t mMessageCount; + uint32_t mRecentCount; + uint32_t mUidNext; + uint32_t mUidValidity; + uint64_t mHighestModSeqValue; + + void init(); + }; + +} + +#endif + +#endif + diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPFolderStatusOperation.h b/MailCore.framework/Versions/A/Headers/MCIMAPFolderStatusOperation.h new file mode 100644 index 0000000..c1d7024 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPFolderStatusOperation.h @@ -0,0 +1,41 @@ +// +// MCIMAPFolderStatusOperation.h +// mailcore2 +// +// Created by Sebastian on 6/5/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + + +#ifndef MAILCORE_MCIMAPFOLDERSTATUSOPERATION_H + +#define MAILCORE_MCIMAPFOLDERSTATUSOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPFolderStatus; + + class IMAPFolderStatusOperation : public IMAPOperation { + public: + IMAPFolderStatusOperation(); + virtual ~IMAPFolderStatusOperation(); + + // Results. + virtual IMAPFolderStatus * status(); + + public: // subclass behavior + virtual void main(); + + private: + IMAPFolderStatus * mStatus; + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPIdentity.h b/MailCore.framework/Versions/A/Headers/MCIMAPIdentity.h new file mode 100644 index 0000000..ab96abb --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPIdentity.h @@ -0,0 +1,54 @@ +// +// MCIMAPIdentity.h +// mailcore2 +// +// Created by Hoa V. DINH on 8/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPIDENTITY_H + +#define MAILCORE_MCIMAPIDENTITY_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPIdentity : public Object { + public: + + IMAPIdentity(); + virtual ~IMAPIdentity(); + + virtual void setVendor(String * vendor); + virtual String * vendor(); + + virtual void setName(String * name); + virtual String * name(); + + virtual void setVersion(String * version); + virtual String * version(); + + virtual Array * allInfoKeys(); + virtual String * infoForKey(String * key); + virtual void setInfoForKey(String * key, String * value); + + public: // subclass behavior + IMAPIdentity(IMAPIdentity * identity); + virtual Object * copy(); + virtual String * description(); + + private: + HashMap * mValues; + + void init(); + }; + +} + +#endif + +#endif + diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPIdentityOperation.h b/MailCore.framework/Versions/A/Headers/MCIMAPIdentityOperation.h new file mode 100644 index 0000000..6caef88 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPIdentityOperation.h @@ -0,0 +1,45 @@ +// +// IMAPIdentityOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPIDENTITYOPERATION_H + +#define MAILCORE_MCIMAPIDENTITYOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPIdentity; + + class IMAPIdentityOperation : public IMAPOperation { + public: + IMAPIdentityOperation(); + virtual ~IMAPIdentityOperation(); + + virtual void setClientIdentity(IMAPIdentity * identity); + virtual IMAPIdentity * clientIdentity(); + + // Result. + virtual IMAPIdentity * serverIdentity(); + + public: // subclass behavior + virtual void main(); + + private: + IMAPIdentity * mClientIdentity; + IMAPIdentity * mServerIdentity; + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPIdleOperation.h b/MailCore.framework/Versions/A/Headers/MCIMAPIdleOperation.h new file mode 100644 index 0000000..f7491d1 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPIdleOperation.h @@ -0,0 +1,46 @@ +// +// IMAPIdleOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPIDLEOPERATION_H + +#define MAILCORE_MCIMAPIDLEOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPIdleOperation : public IMAPOperation { + public: + IMAPIdleOperation(); + virtual ~IMAPIdleOperation(); + + virtual void setLastKnownUID(uint32_t uid); + virtual uint32_t lastKnownUID(); + + virtual void interruptIdle(); + + public: // subclass behavior + virtual void main(); + + private: + uint32_t mLastKnownUid; + bool mSetupSuccess; + bool mInterrupted; + pthread_mutex_t mLock; + void prepare(); + void unprepare(); + bool isInterrupted(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPMessage.h b/MailCore.framework/Versions/A/Headers/MCIMAPMessage.h new file mode 100644 index 0000000..a78a04d --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPMessage.h @@ -0,0 +1,88 @@ +#ifndef MAILCORE_IMAP_MESSAGE_H + +#define MAILCORE_IMAP_MESSAGE_H + +#include +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPPart; + class HTMLRendererIMAPCallback; + class HTMLRendererTemplateCallback; + + class IMAPMessage : public AbstractMessage { + public: + IMAPMessage(); + virtual ~IMAPMessage(); + + virtual uint32_t uid(); + virtual void setUid(uint32_t uid); + + virtual uint32_t size(); + virtual void setSize(uint32_t size); + + virtual void setFlags(MessageFlag flags); + virtual MessageFlag flags(); + + virtual void setOriginalFlags(MessageFlag flags); + virtual MessageFlag originalFlags(); + + virtual void setCustomFlags(Array * customFlags); + virtual Array * customFlags(); + + virtual uint64_t modSeqValue(); + virtual void setModSeqValue(uint64_t uid); + + virtual void setMainPart(AbstractPart * mainPart); + virtual AbstractPart * mainPart(); + + virtual void setGmailLabels(Array * /* String */ labels); + virtual Array * /* String */ gmailLabels(); + + virtual void setGmailMessageID(uint64_t msgID); + virtual uint64_t gmailMessageID(); + + virtual void setGmailThreadID(uint64_t threadID); + virtual uint64_t gmailThreadID(); + + virtual AbstractPart * partForPartID(String * partID); + + virtual AbstractPart * partForContentID(String * contentID); + virtual AbstractPart * partForUniqueID(String * uniqueID); + + virtual String * htmlRendering(String * folder, + HTMLRendererIMAPCallback * dataCallback, + HTMLRendererTemplateCallback * htmlCallback = NULL); + + public: // subclass behavior + IMAPMessage(IMAPMessage * other); + virtual Object * copy(); + virtual String * description(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + private: + uint64_t mModSeqValue; + uint32_t mUid; + uint32_t mSize; + + MessageFlag mFlags; + MessageFlag mOriginalFlags; + Array * /* String */ mCustomFlags; + AbstractPart * mMainPart; + Array * /* String */ mGmailLabels; + uint64_t mGmailMessageID; + uint64_t mGmailThreadID; + void init(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPMessagePart.h b/MailCore.framework/Versions/A/Headers/MCIMAPMessagePart.h new file mode 100644 index 0000000..0a65284 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPMessagePart.h @@ -0,0 +1,34 @@ +#ifndef MAILCORE_IMAPMESSAGEPART_H + +#define MAILCORE_IMAPMESSAGEPART_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPMessagePart : public AbstractMessagePart { + public: + IMAPMessagePart(); + virtual ~IMAPMessagePart(); + + virtual void setPartID(String * partID); + virtual String * partID(); + + public: // subclass behavior + IMAPMessagePart(IMAPMessagePart * other); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + private: + String * mPartID; + void init(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPMessageRenderingOperation.h b/MailCore.framework/Versions/A/Headers/MCIMAPMessageRenderingOperation.h new file mode 100644 index 0000000..81e1f26 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPMessageRenderingOperation.h @@ -0,0 +1,48 @@ +// +// MCIMAPMessageRenderingOperation.h +// mailcore2 +// +// Created by Paul Young on 27/06/2013. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPMessageRenderingOperation_H + +#define MAILCORE_MCIMAPMessageRenderingOperation_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPMessageRenderingOperation : public IMAPOperation { + public: + IMAPMessageRenderingOperation(); + virtual ~IMAPMessageRenderingOperation(); + + virtual void setRenderingType(IMAPMessageRenderingType type); + virtual IMAPMessageRenderingType renderingType(); + + virtual void setMessage(IMAPMessage * message); + virtual IMAPMessage * message(); + + // Result. + virtual String * result(); + + public: // subclass behavior + virtual void main(); + + private: + IMAPMessageRenderingType mRenderingType; + String * mResult; + IMAPMessage * mMessage; + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPMultipart.h b/MailCore.framework/Versions/A/Headers/MCIMAPMultipart.h new file mode 100644 index 0000000..e420b22 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPMultipart.h @@ -0,0 +1,34 @@ +#ifndef MAILCORE_MCIMAPMULTIPART_H + +#define MAILCORE_MCIMAPMULTIPART_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPMultipart : public AbstractMultipart { + public: + IMAPMultipart(); + virtual ~IMAPMultipart(); + + virtual void setPartID(String * partID); + virtual String * partID(); + + public: // subclass behavior + IMAPMultipart(IMAPMultipart * other); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + private: + String * mPartID; + void init(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPNamespace.h b/MailCore.framework/Versions/A/Headers/MCIMAPNamespace.h new file mode 100644 index 0000000..0c7ac6a --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPNamespace.h @@ -0,0 +1,51 @@ +#ifndef MAILCORE_MCIMAPNAMESPACE_H + +#define MAILCORE_MCIMAPNAMESPACE_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPNamespaceItem; + + class IMAPNamespace : public Object { + public: + IMAPNamespace(); + virtual ~IMAPNamespace(); + + virtual String * mainPrefix(); + virtual char mainDelimiter(); + + virtual Array * /* String */ prefixes(); + + virtual String * pathForComponents(Array * components); + virtual String * pathForComponentsAndPrefix(Array * components, String * prefix); + + virtual Array * /* String */ componentsFromPath(String * path); + + virtual bool containsFolderPath(String * path); + + static IMAPNamespace * namespaceWithPrefix(String * prefix, char delimiter); + + public: // subclass behavior + IMAPNamespace(IMAPNamespace * other); + virtual String * description(); + virtual Object * copy(); + + private: + Array * /* String */ mItems; + void init(); + IMAPNamespaceItem * mainItem(); + IMAPNamespaceItem * itemForPath(String * path); + + public: // private + virtual void importIMAPNamespace(struct mailimap_namespace_item * item); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPNamespaceItem.h b/MailCore.framework/Versions/A/Headers/MCIMAPNamespaceItem.h new file mode 100644 index 0000000..a78d691 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPNamespaceItem.h @@ -0,0 +1,46 @@ +#ifndef MAILCORE_MCIMAPNAMESPACEITEM_H + +#define MAILCORE_MCIMAPNAMESPACEITEM_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPNamespaceItem : public Object { + public: + IMAPNamespaceItem(); + virtual ~IMAPNamespaceItem(); + + virtual void setPrefix(String * prefix); + virtual String * prefix(); + + virtual void setDelimiter(char delimiter); + virtual char delimiter(); + + virtual String * pathForComponents(Array * components); + virtual Array * /* String */ componentsForPath(String * path); + + virtual bool containsFolder(String * folder); + + public: // subclass behavior + IMAPNamespaceItem(IMAPNamespaceItem * other); + virtual String * description(); + virtual Object * copy(); + + private: + char mDelimiter; + String * mPrefix; + void init(); + + public: // private + virtual void importIMAPNamespaceInfo(struct mailimap_namespace_info * info); + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPNoopOperation.h b/MailCore.framework/Versions/A/Headers/MCIMAPNoopOperation.h new file mode 100644 index 0000000..8ff3fda --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPNoopOperation.h @@ -0,0 +1,32 @@ +// +// MCIMAPNoopOperation.h +// mailcore2 +// +// Created by Robert Widmann on 9/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPNOOPOPERATION_H + +#define MAILCORE_MCIMAPNOOPOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPNoopOperation : public IMAPOperation { + public: + IMAPNoopOperation(); + virtual ~IMAPNoopOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPOperation.h b/MailCore.framework/Versions/A/Headers/MCIMAPOperation.h new file mode 100644 index 0000000..ed5bc56 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPOperation.h @@ -0,0 +1,73 @@ +// +// MCIMAPOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPOPERATION_H + +#define MAILCORE_MCIMAPOPERATION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPAsyncConnection; + class IMAPAsyncSession; + class IMAPOperationCallback; + + class IMAPOperation : public Operation, public IMAPProgressCallback { + public: + IMAPOperation(); + virtual ~IMAPOperation(); + + virtual void setMainSession(IMAPAsyncSession * session); + virtual IMAPAsyncSession * mainSession(); + + virtual void setSession(IMAPAsyncConnection * session); + virtual IMAPAsyncConnection * session(); + + virtual void setFolder(String * folder); + virtual String * folder(); + + virtual void setUrgent(bool urgent); + virtual bool isUrgent(); + + virtual void setImapCallback(IMAPOperationCallback * callback); + virtual IMAPOperationCallback * imapCallback(); + + virtual void beforeMain(); + virtual void afterMain(); + + virtual void start(); + + // Result. + virtual void setError(ErrorCode error); + virtual ErrorCode error(); + + private: + IMAPAsyncSession * mMainSession; + IMAPAsyncConnection * mSession; + String * mFolder; + IMAPOperationCallback * mImapCallback; + ErrorCode mError; + bool mUrgent; + + private: + virtual void bodyProgress(IMAPSession * session, unsigned int current, unsigned int maximum); + virtual void bodyProgressOnMainThread(void * context); + virtual void itemsProgress(IMAPSession * session, unsigned int current, unsigned int maximum); + virtual void itemsProgressOnMainThread(void * context); + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPOperationCallback.h b/MailCore.framework/Versions/A/Headers/MCIMAPOperationCallback.h new file mode 100644 index 0000000..cae7ef9 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPOperationCallback.h @@ -0,0 +1,29 @@ +// +// MCIMAPOperationCallback.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPOPERATIONCALLBACK_H + +#define MAILCORE_MCIMAPOPERATIONCALLBACK_H + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPOperation; + + class IMAPOperationCallback { + public: + virtual void bodyProgress(IMAPOperation * session, unsigned int current, unsigned int maximum) {}; + virtual void itemProgress(IMAPOperation * session, unsigned int current, unsigned int maximum) {}; + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPPart.h b/MailCore.framework/Versions/A/Headers/MCIMAPPart.h new file mode 100644 index 0000000..f04bb90 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPPart.h @@ -0,0 +1,66 @@ +#ifndef MAILCORE_MCIMAPPART_H + +#define MAILCORE_MCIMAPPART_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPMessagePart; + class IMAPMultipart; + + class IMAPPart : public AbstractPart { + public: + IMAPPart(); + virtual ~IMAPPart(); + + virtual void setPartID(String * partID); + virtual String * partID(); + + virtual void setSize(unsigned int size); + virtual unsigned int size(); + + virtual unsigned int decodedSize(); + + virtual void setEncoding(Encoding encoding); + virtual Encoding encoding(); + + public: // subclass behavior + IMAPPart(IMAPPart * other); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + public: // private + static AbstractPart * attachmentWithIMAPBody(struct mailimap_body * body); + + virtual void importIMAPFields(struct mailimap_body_fields * fields, + struct mailimap_body_ext_1part * extension); + + private: + String * mPartID; + Encoding mEncoding; + unsigned int mSize; + void init(); + static AbstractPart * attachmentWithIMAPBodyInternal(struct mailimap_body * body, String * partID); + static AbstractPart * attachmentWithIMAPBody1Part(struct mailimap_body_type_1part * body_1part, + String * partID); + static IMAPMessagePart * attachmentWithIMAPBody1PartMessage(struct mailimap_body_type_msg * message, + struct mailimap_body_ext_1part * extension, + String * partID); + static IMAPPart * attachmentWithIMAPBody1PartBasic(struct mailimap_body_type_basic * basic, + struct mailimap_body_ext_1part * extension); + static IMAPPart * attachmentWithIMAPBody1PartText(struct mailimap_body_type_text * text, + struct mailimap_body_ext_1part * extension); + static IMAPMultipart * attachmentWithIMAPBodyMultipart(struct mailimap_body_type_mpart * body_mpart, + String * partID); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPProgressCallback.h b/MailCore.framework/Versions/A/Headers/MCIMAPProgressCallback.h new file mode 100644 index 0000000..2df4815 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPProgressCallback.h @@ -0,0 +1,21 @@ +#ifndef MAILCORE_MCIMAPPROGRESSCALLBACK_H + +#define MAILCORE_MCIMAPPROGRESSCALLBACK_H + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPSession; + + class IMAPProgressCallback { + public: + virtual void bodyProgress(IMAPSession * session, unsigned int current, unsigned int maximum) {}; + virtual void itemsProgress(IMAPSession * session, unsigned int current, unsigned int maximum) {}; + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPQuotaOperation.h b/MailCore.framework/Versions/A/Headers/MCIMAPQuotaOperation.h new file mode 100644 index 0000000..bff3095 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPQuotaOperation.h @@ -0,0 +1,40 @@ +// +// MCIMAPQuotaOperation.h +// mailcore2 +// +// Created by Petro Korenev on 8/2/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPQuotaOperation_H + +#define MAILCORE_MCIMAPQuotaOperation_H + +#include "MCIMAPOperation.h" + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPQuotaOperation : public IMAPOperation { + public: + IMAPQuotaOperation(); + virtual ~IMAPQuotaOperation(); + + // Result. + virtual uint32_t limit(); + virtual uint32_t usage(); + + public: // subclass behavior + virtual void main(); + + private: + uint32_t mLimit; + uint32_t mUsage; + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPSearchExpression.h b/MailCore.framework/Versions/A/Headers/MCIMAPSearchExpression.h new file mode 100644 index 0000000..a6e4833 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPSearchExpression.h @@ -0,0 +1,85 @@ +#ifndef MAILCORE_MCIMAPSEARCHEXPRESSION_H + +#define MAILCORE_MCIMAPSEARCHEXPRESSION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPSearchExpression : public Object { + public: + IMAPSearchExpression(); + virtual ~IMAPSearchExpression(); + + virtual IMAPSearchKind kind(); + virtual String * header(); + virtual String * value(); + virtual uint64_t longNumber(); + virtual time_t date(); + virtual IndexSet * uids(); + + + virtual IMAPSearchExpression * leftExpression(); + virtual IMAPSearchExpression * rightExpression(); + + static IMAPSearchExpression * searchAll(); + static IMAPSearchExpression * searchFrom(String * value); + static IMAPSearchExpression * searchTo(String *value); + static IMAPSearchExpression * searchCc(String *value); + static IMAPSearchExpression * searchBcc(String *value); + static IMAPSearchExpression * searchRecipient(String * value); + static IMAPSearchExpression * searchSubject(String * value); + static IMAPSearchExpression * searchContent(String * value); + static IMAPSearchExpression * searchBody(String * value); + static IMAPSearchExpression * searchHeader(String * header, String * value); + static IMAPSearchExpression * searchUIDs(IndexSet * uids); + static IMAPSearchExpression * searchRead(); + static IMAPSearchExpression * searchUnread(); + static IMAPSearchExpression * searchFlagged(); + static IMAPSearchExpression * searchUnflagged(); + static IMAPSearchExpression * searchAnswered(); + static IMAPSearchExpression * searchUnanswered(); + static IMAPSearchExpression * searchDraft(); + static IMAPSearchExpression * searchUndraft(); + static IMAPSearchExpression * searchDeleted(); + static IMAPSearchExpression * searchSpam(); + static IMAPSearchExpression * searchBeforeDate(time_t date); + static IMAPSearchExpression * searchOnDate(time_t date); + static IMAPSearchExpression * searchSinceDate(time_t date); + static IMAPSearchExpression * searchBeforeReceivedDate(time_t date); + static IMAPSearchExpression * searchOnReceivedDate(time_t date); + static IMAPSearchExpression * searchSinceReceivedDate(time_t date); + static IMAPSearchExpression * searchSizeLarger(uint32_t size); + static IMAPSearchExpression * searchSizeSmaller(uint32_t size); + static IMAPSearchExpression * searchGmailThreadID(uint64_t number); + static IMAPSearchExpression * searchGmailMessageID(uint64_t number); + static IMAPSearchExpression * searchGmailRaw(String * expr); + static IMAPSearchExpression * searchAnd(IMAPSearchExpression * left, IMAPSearchExpression * right); + static IMAPSearchExpression * searchOr(IMAPSearchExpression * left, IMAPSearchExpression * right); + static IMAPSearchExpression * searchNot(IMAPSearchExpression * notExpr); + + + public: // subclass behavior + IMAPSearchExpression(IMAPSearchExpression * other); + virtual String * description(); + virtual Object * copy(); + + private: + IMAPSearchKind mKind; + String * mHeader; + String * mValue; + uint64_t mLongNumber; + IndexSet * mUids; + IMAPSearchExpression * mLeftExpression; + IMAPSearchExpression * mRightExpression; + void init(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPSearchOperation.h b/MailCore.framework/Versions/A/Headers/MCIMAPSearchOperation.h new file mode 100644 index 0000000..60355ca --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPSearchOperation.h @@ -0,0 +1,54 @@ +// +// IMAPSearchOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/12/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPSEARCHOPERATION_H + +#define MAILCORE_MCIMAPSEARCHOPERATION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPSearchExpression; + + class IMAPSearchOperation : public IMAPOperation { + public: + IMAPSearchOperation(); + virtual ~IMAPSearchOperation(); + + virtual void setSearchKind(IMAPSearchKind kind); + virtual IMAPSearchKind searchKind(); + + virtual void setSearchString(String * searchString); + virtual String * searchString(); + + virtual void setSearchExpression(IMAPSearchExpression * expression); + virtual IMAPSearchExpression * searchExpression(); + + // Result. + virtual IndexSet * uids(); + + public: // subclass behavior + virtual void main(); + + private: + IMAPSearchKind mKind; + String * mSearchString; + IMAPSearchExpression * mExpression; + IndexSet * mUids; + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPSession.h b/MailCore.framework/Versions/A/Headers/MCIMAPSession.h new file mode 100755 index 0000000..6426fce --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPSession.h @@ -0,0 +1,279 @@ +#ifndef MAILCORE_MCIMAPSESSION_H + +#define MAILCORE_MCIMAPSESSION_H + +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + extern String * IMAPNamespacePersonal; + extern String * IMAPNamespaceOther; + extern String * IMAPNamespaceShared; + + class IMAPNamespace; + class IMAPSearchExpression; + class IMAPFolder; + class IMAPProgressCallback; + class IMAPSyncResult; + class IMAPFolderStatus; + class IMAPIdentity; + + class IMAPSession : public Object { + public: + IMAPSession(); + virtual ~IMAPSession(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * username); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + + // To authenticate using OAuth2, username and oauth2token should be set. + // auth type to use is AuthTypeOAuth2. + virtual void setOAuth2Token(String * token); + virtual String * OAuth2Token(); + + virtual void setAuthType(AuthType authType); + virtual AuthType authType(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void setVoIPEnabled(bool enabled); + virtual bool isVoIPEnabled(); + + // Needed for fetchSubscribedFolders() and fetchAllFolders(). + virtual void setDefaultNamespace(IMAPNamespace * ns); + virtual IMAPNamespace * defaultNamespace(); + + virtual IMAPIdentity * serverIdentity(); + virtual IMAPIdentity * clientIdentity(); + + virtual void select(String * folder, ErrorCode * pError); + virtual IMAPFolderStatus * folderStatus(String * folder, ErrorCode * pError); + + virtual Array * /* IMAPFolder */ fetchSubscribedFolders(ErrorCode * pError); + virtual Array * /* IMAPFolder */ fetchAllFolders(ErrorCode * pError); // will use xlist if available + + virtual void renameFolder(String * folder, String * otherName, ErrorCode * pError); + virtual void deleteFolder(String * folder, ErrorCode * pError); + virtual void createFolder(String * folder, ErrorCode * pError); + + virtual void subscribeFolder(String * folder, ErrorCode * pError); + virtual void unsubscribeFolder(String * folder, ErrorCode * pError); + + virtual void appendMessage(String * folder, Data * messageData, MessageFlag flags, + IMAPProgressCallback * progressCallback, uint32_t * createdUID, ErrorCode * pError); + virtual void appendMessageWithCustomFlags(String * folder, Data * messageData, MessageFlag flags, Array * customFlags, + IMAPProgressCallback * progressCallback, uint32_t * createdUID, ErrorCode * pError); + virtual void appendMessageWithCustomFlagsAndDate(String * folder, Data * messageData, MessageFlag flags, Array * customFlags, time_t date, + IMAPProgressCallback * progressCallback, uint32_t * createdUID, ErrorCode * pError); + + void copyMessages(String * folder, IndexSet * uidSet, String * destFolder, + HashMap ** pUidMapping, ErrorCode * pError); + + virtual void expunge(String * folder, ErrorCode * pError); + + virtual Array * /* IMAPMessage */ fetchMessagesByUID(String * folder, IMAPMessagesRequestKind requestKind, + IndexSet * uids, IMAPProgressCallback * progressCallback, + ErrorCode * pError); + virtual Array * /* IMAPMessage */ fetchMessagesByUIDWithExtraHeaders(String * folder, + IMAPMessagesRequestKind requestKind, + IndexSet * uids, + IMAPProgressCallback * progressCallback, + Array * extraHeaders, ErrorCode * pError); + virtual Array * /* IMAPMessage */ fetchMessagesByNumber(String * folder, IMAPMessagesRequestKind requestKind, + IndexSet * numbers, IMAPProgressCallback * progressCallback, + ErrorCode * pError); + virtual Array * /* IMAPMessage */ fetchMessagesByNumberWithExtraHeaders(String * folder, + IMAPMessagesRequestKind requestKind, + IndexSet * numbers, + IMAPProgressCallback * progressCallback, + Array * extraHeaders, ErrorCode * pError); + + virtual Data * fetchMessageByUID(String * folder, uint32_t uid, + IMAPProgressCallback * progressCallback, ErrorCode * pError); + virtual Data * fetchMessageAttachmentByUID(String * folder, uint32_t uid, String * partID, + Encoding encoding, IMAPProgressCallback * progressCallback, ErrorCode * pError); + virtual HashMap * fetchMessageNumberUIDMapping(String * folder, uint32_t fromUID, uint32_t toUID, + ErrorCode * pError); + + /* When CONDSTORE or QRESYNC is available */ + virtual IMAPSyncResult * syncMessagesByUID(String * folder, IMAPMessagesRequestKind requestKind, + IndexSet * uids, uint64_t modseq, + IMAPProgressCallback * progressCallback, ErrorCode * pError); + /* Same as syncMessagesByUID, allows for extra headers */ + virtual IMAPSyncResult * syncMessagesByUIDWithExtraHeaders(String * folder, IMAPMessagesRequestKind requestKind, + IndexSet * uids, uint64_t modseq, + IMAPProgressCallback * progressCallback, + Array * extraHeaders, ErrorCode * pError); + + virtual void storeFlags(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, ErrorCode * pError); + virtual void storeFlagsAndCustomFlags(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, MessageFlag flags, Array * customFlags, ErrorCode * pError); + virtual void storeLabels(String * folder, IndexSet * uids, IMAPStoreFlagsRequestKind kind, Array * labels, ErrorCode * pError); + + virtual IndexSet * search(String * folder, IMAPSearchKind kind, String * searchString, ErrorCode * pError); + virtual IndexSet * search(String * folder, IMAPSearchExpression * expression, ErrorCode * pError); + virtual void getQuota(uint32_t *usage, uint32_t *limit, ErrorCode * pError); + + virtual bool setupIdle(); + virtual void idle(String * folder, uint32_t lastKnownUID, ErrorCode * pError); + virtual void interruptIdle(); + virtual void unsetupIdle(); + + virtual void connect(ErrorCode * pError); + virtual void disconnect(); + + virtual void noop(ErrorCode * pError); + + virtual HashMap * fetchNamespace(ErrorCode * pError); + + virtual void login(ErrorCode * pError); + + IMAPIdentity * identity(IMAPIdentity * clientIdentity, ErrorCode * pError); + + virtual IndexSet * capability(ErrorCode * pError); + + virtual void enableCompression(ErrorCode * pError); + + virtual uint32_t uidValidity(); + virtual uint32_t uidNext(); + virtual uint64_t modSequenceValue(); + virtual unsigned int lastFolderMessageCount(); + virtual uint32_t firstUnseenUid(); + + virtual bool isIdleEnabled(); + virtual bool isXListEnabled(); + virtual bool isCondstoreEnabled(); + virtual bool isQResyncEnabled(); + virtual bool isIdentityEnabled(); + virtual bool isXOAuthEnabled(); + virtual bool isNamespaceEnabled(); + virtual bool isCompressionEnabled(); + virtual bool allowsNewPermanentFlags(); + + virtual String * gmailUserDisplayName(); + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + + /** HTML rendering of the body of the message to be displayed in a web view.*/ + virtual String * htmlRendering(IMAPMessage * message, String * folder, ErrorCode * pError); + + /** HTML rendering of the body of the message.*/ + virtual String * htmlBodyRendering(IMAPMessage * message, String * folder, ErrorCode * pError); + + /** Text rendering of the message.*/ + virtual String * plainTextRendering(IMAPMessage * message, String * folder, ErrorCode * pError); + + /** Text rendering of the body of the message. All end of line will be removed and white spaces cleaned up if requested. + This method can be used to generate the summary of the message.*/ + virtual String * plainTextBodyRendering(IMAPMessage * message, String * folder, bool stripWhitespace, ErrorCode * pError); + + /** Enable automatic query of the capabilities of the IMAP server when set to true. */ + virtual void setAutomaticConfigurationEnabled(bool enabled); + + /** Check if the automatic query of the capabilities of the IMAP server is enabled. */ + virtual bool isAutomaticConfigurationEnabled(); + + public: // private + virtual void loginIfNeeded(ErrorCode * pError); + virtual void connectIfNeeded(ErrorCode * pError); + virtual void selectIfNeeded(String * folder, ErrorCode * pError); + virtual bool isDisconnected(); + virtual bool isAutomaticConfigurationDone(); + virtual void resetAutomaticConfigurationDone(); + virtual void applyCapabilities(IndexSet * capabilities); + + private: + String * mHostname; + unsigned int mPort; + String * mUsername; + String * mPassword; + String * mOAuth2Token; + AuthType mAuthType; + ConnectionType mConnectionType; + bool mCheckCertificateEnabled; + bool mVoIPEnabled; + char mDelimiter; + IMAPNamespace * mDefaultNamespace; + IMAPIdentity * mServerIdentity; + IMAPIdentity * mClientIdentity; + time_t mTimeout; + + bool mBodyProgressEnabled; + bool mIdleEnabled; + bool mXListEnabled; + bool mCondstoreEnabled; + bool mQResyncEnabled; + bool mIdentityEnabled; + bool mXOauth2Enabled; + bool mNamespaceEnabled; + bool mCompressionEnabled; + bool mIsGmail; + bool mAllowsNewPermanentFlags; + String * mWelcomeString; + bool mNeedsMboxMailWorkaround; + uint32_t mUIDValidity; + uint32_t mUIDNext; + uint64_t mModSequenceValue; + unsigned int mFolderMsgCount; + uint32_t mFirstUnseenUid; + bool mYahooServer; + + unsigned int mLastFetchedSequenceNumber; + String * mCurrentFolder; + pthread_mutex_t mIdleLock; + bool mCanIdle; + int mState; + mailimap * mImap; + IMAPProgressCallback * mProgressCallback; + unsigned int mProgressItemsCount; + ConnectionLogger * mConnectionLogger; + bool mAutomaticConfigurationEnabled; + bool mAutomaticConfigurationDone; + bool mShouldDisconnect; + + String * mLoginResponse; + String * mGmailUserDisplayName; + + void init(); + void bodyProgress(unsigned int current, unsigned int maximum); + void itemsProgress(unsigned int current, unsigned int maximum); + bool checkCertificate(); + static void body_progress(size_t current, size_t maximum, void * context); + static void items_progress(size_t current, size_t maximum, void * context); + void setup(); + void unsetup(); + char fetchDelimiterIfNeeded(char defaultDelimiter, ErrorCode * pError); + IMAPSyncResult * fetchMessages(String * folder, IMAPMessagesRequestKind requestKind, + bool fetchByUID, struct mailimap_set * imapset, uint64_t modseq, + HashMap * mapping, uint32_t startUid, IMAPProgressCallback * progressCallback, + Array * extraHeaders, ErrorCode * pError); + void capabilitySetWithSessionState(IndexSet * capabilities); + bool enableFeature(String * feature); + void enableFeatures(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIMAPSyncResult.h b/MailCore.framework/Versions/A/Headers/MCIMAPSyncResult.h new file mode 100644 index 0000000..ad1b16a --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIMAPSyncResult.h @@ -0,0 +1,39 @@ +// +// MCIMAPSyncResult.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/3/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCIMAPSYNCRESULT_H + +#define MAILCORE_MCIMAPSYNCRESULT_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IMAPSyncResult : public Object { + public: + IMAPSyncResult(); + virtual ~IMAPSyncResult(); + + virtual void setModifiedOrAddedMessages(Array * /* IMAPMessage */ messages); + virtual Array * /* IMAPMessage */ modifiedOrAddedMessages(); + + virtual void setVanishedMessages(IndexSet * vanishedMessages); + virtual IndexSet * vanishedMessages(); + + private: + Array * /* IMAPMessage */ mModifiedOrAddedMessages; + IndexSet * mVanishedMessages; + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIndexSet.h b/MailCore.framework/Versions/A/Headers/MCIndexSet.h new file mode 100644 index 0000000..525cdda --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIndexSet.h @@ -0,0 +1,75 @@ +// +// MCIndexSet.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/4/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCINDEXSET_H + +#define MAILCORE_MCINDEXSET_H + +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class IndexSet : public Object { + public: + IndexSet(); + IndexSet(IndexSet * o); + + static IndexSet * indexSet(); + static IndexSet * indexSetWithRange(Range range); + static IndexSet * indexSetWithIndex(uint64_t idx); + + virtual unsigned int count(); + virtual void addIndex(uint64_t idx); + virtual void removeIndex(uint64_t idx); + virtual bool containsIndex(uint64_t idx); + + virtual void addRange(Range range); + virtual void removeRange(Range range); + virtual void intersectsRange(Range range); + + virtual void addIndexSet(IndexSet * indexSet); + virtual void removeIndexSet(IndexSet * indexSet); + virtual void intersectsIndexSet(IndexSet * indexSet); + + virtual Range * allRanges(); + virtual unsigned int rangesCount(); + virtual void removeAllIndexes(); + + public: // subclass behavior + virtual ~IndexSet(); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + private: + Range * mRanges; + unsigned int mCount; + unsigned int mAllocated; + void init(); + int rangeIndexForIndex(uint64_t idx); + int rangeIndexForIndexWithBounds(uint64_t idx, unsigned int left, unsigned int right); + void addRangeIndex(unsigned int rangeIndex); + void removeRangeIndex(unsigned int rangeIndex, unsigned int count); + int rightRangeIndexForIndex(uint64_t idx); + int rightRangeIndexForIndexWithBounds(uint64_t idx, unsigned int left, unsigned int right); + int leftRangeIndexForIndex(uint64_t idx); + int leftRangeIndexForIndexWithBounds(uint64_t idx, unsigned int left, unsigned int right); + void mergeRanges(unsigned int rangeIndex); + void tryToMergeAdjacentRanges(unsigned int rangeIndex); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCIterator.h b/MailCore.framework/Versions/A/Headers/MCIterator.h new file mode 100644 index 0000000..c8b23fa --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCIterator.h @@ -0,0 +1,186 @@ +// +// MCIterator.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 4/18/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_ITERATOR_H + +#define MAILCORE_ITERATOR_H + +#include +#include +#include +#include +#include + +#ifdef __cplusplus + +#define mc_foreacharray(type, __variable, __array) \ +type * __variable; \ +mailcore::ArrayIterator __variable##__iterator = mailcore::ArrayIteratorInit(__array); \ +for (; NULL != (__variable = (type *) mailcore::ArrayIteratorNext(&__variable##__iterator)); ) + +#define mc_foreacharrayIndex(__index, type, __variable, __array) \ +type * __variable; \ +mailcore::ArrayIterator __variable##__iterator = mailcore::ArrayIteratorInit(__array); \ +for (unsigned int __index = 0; NULL != (__variable = (type *) mailcore::ArrayIteratorNext(&__variable##__iterator)); __index++) + +#define mc_foreachhashmapKey(keyType, __key, __hashmap) \ +keyType * __key; \ +HashMapIterator __key##__iterator = HashMapIteratorInit(__hashmap, true, false); \ +while (HashMapIteratorRun(&__key##__iterator)) \ +while (HashMapIteratorNext(&__key##__iterator, &__key, NULL)) + +#define mc_foreachhashmapValue(valueType, __value, __hashmap) \ +valueType * __value; \ +HashMapIterator __value##__iterator = HashMapIteratorInit(__hashmap, false, true); \ +while (HashMapIteratorRun(&__value##__iterator)) \ +while (HashMapIteratorNext(&__value##__iterator, NULL, (Object **) &__value)) + +#define mc_foreachhashmapKeyAndValue(keyType, __key, valueType, __value, __hashmap) \ +keyType * __key; \ +valueType * __value; \ +HashMapIterator __key##__value##__iterator = HashMapIteratorInit(__hashmap, true, true); \ +while (HashMapIteratorRun(&__key##__value##__iterator)) \ +while (HashMapIteratorNext(&__key##__value##__iterator, (Object **) &__key, (Object **) &__value)) + +#define mc_foreachindexset(__variable, __indexset) \ +int64_t __variable; \ +mailcore::IndexSetIterator __variable##__iterator = mailcore::IndexSetIteratorInit(__indexset); \ +for (; (__variable = IndexSetIteratorValue(&__variable##__iterator)), IndexSetIteratorIsValid(&__variable##__iterator) ; mailcore::IndexSetIteratorNext(&__variable##__iterator)) + +namespace mailcore { + + struct IndexSetIterator { + unsigned int rangeIndex; + unsigned int index; + Range * currentRange; + IndexSet * indexSet; + }; + + static inline IndexSetIterator IndexSetIteratorInit(IndexSet * indexSet) + { + IndexSetIterator iterator = { 0, 0, NULL, indexSet }; + if (indexSet->rangesCount() >= 1) { + iterator.currentRange = &indexSet->allRanges()[0]; + } + return iterator; + } + + static inline bool IndexSetIteratorIsValid(IndexSetIterator * iterator) + { + return iterator->currentRange != NULL; + } + + static inline int64_t IndexSetIteratorValue(IndexSetIterator * iterator) + { + return iterator->currentRange == NULL ? -1 : iterator->currentRange->location + iterator->index; + } + + static inline bool IndexSetIteratorNext(IndexSetIterator * iterator) + { + iterator->index ++; + if (iterator->index > iterator->currentRange->length) { + // switch to an other range + iterator->index = 0; + iterator->rangeIndex ++; + if (iterator->rangeIndex >= iterator->indexSet->rangesCount()) { + iterator->currentRange = NULL; + return false; + } + else { + iterator->currentRange = &iterator->indexSet->allRanges()[iterator->rangeIndex]; + return true; + } + } + else { + return true; + } + } + + struct ArrayIterator { + unsigned index; + unsigned count; + Array * array; + }; + + static inline ArrayIterator ArrayIteratorInit(Array * array) + { + ArrayIterator iterator = { 0, array != NULL ? array->count() : 0, array }; + return iterator; + } + + static inline Object * ArrayIteratorNext(ArrayIterator * iterator) + { + if (iterator->index >= iterator->count) { + return NULL; + } + + Object * result = iterator->array->objectAtIndex(iterator->index); + ++ iterator->index; + return result; + } + + + struct HashMapIterator { + bool cleanup; + unsigned index; + unsigned count; + Array * keys; + Array * values; + }; + + static inline HashMapIterator HashMapIteratorInit(HashMap * hashmap, bool useKeys, bool useValues) + { + AutoreleasePool * pool = new AutoreleasePool(); + Array * keys = useKeys ? (hashmap != NULL ? hashmap->allKeys() : NULL) : NULL; + Array * values = useValues ? (hashmap != NULL ? hashmap->allValues() : NULL) : NULL; + if (keys != NULL) { + keys->retain(); + } + if (values != NULL) { + values->retain(); + } + HashMapIterator iterator = { false, 0, hashmap != NULL ? hashmap->count() : 0, keys, values }; + pool->release(); + + return iterator; + } + + static inline bool HashMapIteratorNext(HashMapIterator * iterator, Object ** keyp, Object ** valuep) + { + if (iterator->index >= iterator->count) { + return false; + } + + if (keyp != NULL) { + * keyp = iterator->keys->objectAtIndex(iterator->index); + } + if (valuep != NULL) { + * valuep = iterator->values->objectAtIndex(iterator->index); + } + iterator->index ++; + return true; + } + + + static inline bool HashMapIteratorRun(HashMapIterator * iterator) + { + if (!iterator->cleanup) { + iterator->cleanup = true; + return true; + } else { + MC_SAFE_RELEASE(iterator->keys); + MC_SAFE_RELEASE(iterator->values); + return false; + } + } + +}; + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCJSON.h b/MailCore.framework/Versions/A/Headers/MCJSON.h new file mode 100644 index 0000000..d10f7d7 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCJSON.h @@ -0,0 +1,38 @@ +// +// MCJSON.h +// hermes +// +// Created by DINH Viêt Hoà on 4/8/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCJSON_H + +#define MAILCORE_MCJSON_H + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Null; + + class JSON { + public: + static String * objectToJSONString(Object * object); + static Data * objectToJSONData(Object * object); + static Object * objectFromJSONString(String * json); + static Object * objectFromJSONData(Data * json); + }; + +} + +#endif + +#endif /* defined(__hermes__MCJSON__) */ diff --git a/MailCore.framework/Versions/A/Headers/MCLibetpanTypes.h b/MailCore.framework/Versions/A/Headers/MCLibetpanTypes.h new file mode 100644 index 0000000..fcb8e70 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCLibetpanTypes.h @@ -0,0 +1,46 @@ +// +// MCLibetpanTypes.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 4/7/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCLIBETPANTYPES_H + +#define MAILCORE_MCLIBETPANTYPES_H + +#ifdef __cplusplus +extern "C" { +#endif + struct mailimap_body_fields; + struct mailimap_body_ext_1part; + struct mailimf_address; + struct mailimf_mailbox; + struct mailimap_address; + struct mailmime; + struct mailmime_mechanism; + struct mailimap_namespace_item; + struct mailimap_namespace_info; + struct mailimap_body; + struct mailimap_body_fields; + struct mailimap_body_ext_1part; + struct mailimap_body_type_1part; + struct mailimap_body_type_basic; + struct mailimap_body_type_text; + struct mailimap_body_type_mpart; + struct mailimap_body_type_msg; + typedef struct mailimap mailimap; + struct mailimap_set; + struct mailimap_date_time; + struct mailimf_fields; + struct mailimap_envelope; + typedef struct mailpop3 mailpop3; + typedef struct mailsmtp mailsmtp; + typedef struct newsnntp newsnntp; + struct mailsem; +#ifdef __cplusplus +} +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCLog.h b/MailCore.framework/Versions/A/Headers/MCLog.h new file mode 100644 index 0000000..95e227e --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCLog.h @@ -0,0 +1,28 @@ +#ifndef MAILCORE_MCLOG_H + +#define MAILCORE_MCLOG_H + +#include + +#define MCLog(...) MCLogInternal(NULL, __FILE__, __LINE__, 0, __VA_ARGS__) +#define MCLogStack(...) MCLogInternal(NULL, __FILE__, __LINE__, 1, __VA_ARGS__) + +extern int MCLogEnabled; + +#ifndef __printflike +#define __printflike(a,b) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + void MCLogInternal(const char * user, + const char * filename, + unsigned int line, + int dumpStack, + const char * format, ...) __printflike(5, 6); +#ifdef __cplusplus +} +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCMD5.h b/MailCore.framework/Versions/A/Headers/MCMD5.h new file mode 100644 index 0000000..a752231 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCMD5.h @@ -0,0 +1,25 @@ +// +// MCMD5.h +// hermes +// +// Created by DINH Viêt Hoà on 4/11/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCMD5_H + +#define MAILCORE_MCMD5_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + Data * md5Data(Data * data); + String * md5String(Data * data); +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCMailProvider.h b/MailCore.framework/Versions/A/Headers/MCMailProvider.h new file mode 100644 index 0000000..bb46bc7 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCMailProvider.h @@ -0,0 +1,75 @@ +// +// MCMailProvider.h +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCMAILPROVIDER_H + +#define MAILCORE_MCMAILPROVIDER_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class NetService; + + class MailProvider : public Object { + public: + static MailProvider * providerWithInfo(HashMap * info); + + MailProvider(); + virtual ~MailProvider(); + + virtual String * identifier(); + + virtual Array * /* NetService */ imapServices(); + virtual Array * /* NetService */ smtpServices(); + virtual Array * /* NetService */ popServices(); + + virtual bool matchEmail(String * email); + virtual bool matchMX(String * hostname); + + virtual String * sentMailFolderPath(); + virtual String * starredFolderPath(); + virtual String * allMailFolderPath(); + virtual String * trashFolderPath(); + virtual String * draftsFolderPath(); + virtual String * spamFolderPath(); + virtual String * importantFolderPath(); + + // Returns true if one of the folders above matches the given one. + virtual bool isMainFolder(String * folderPath, String * prefix); + + public: // subclass behavior + MailProvider(MailProvider * other); + virtual String * description(); + virtual Object * copy(); + + public: // private + virtual void setIdentifier(String * identifier); + virtual void fillWithInfo(HashMap * info); + + private: + String * mIdentifier; + Array * /* String */ mDomainMatch; + Array * /* String */ mDomainExclude; + Array * /* String */ mMxMatch; + Array * /* NetService */ mImapServices; + Array * /* NetService */ mSmtpServices; + Array * /* NetService */ mPopServices; + HashMap * mMailboxPaths; + + virtual bool matchDomain(String * match, String * domain); + void init(); + }; + +}; + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCMailProvidersManager.h b/MailCore.framework/Versions/A/Headers/MCMailProvidersManager.h new file mode 100644 index 0000000..8babaae --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCMailProvidersManager.h @@ -0,0 +1,43 @@ +// +// MCMailProvidersManager.h +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCMAILPROVIDERSMANAGER_H + +#define MAILCORE_MCMAILPROVIDERSMANAGER_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MailProvider; + + class MailProvidersManager : public Object { + public: + static MailProvidersManager * sharedManager(); + + virtual MailProvider * providerForEmail(String * email); + virtual MailProvider * providerForMX(String * hostname); + virtual MailProvider * providerForIdentifier(String * identifier); + + virtual void registerProvidersWithFilename(String * filename); + + private: + MailProvidersManager(); + void registerProviders(HashMap * providers); + + HashMap * mProviders; + + void init(); + }; +} + +#endif + +#endif \ No newline at end of file diff --git a/MailCore.framework/Versions/A/Headers/MCMainThread.h b/MailCore.framework/Versions/A/Headers/MCMainThread.h new file mode 100644 index 0000000..df24666 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCMainThread.h @@ -0,0 +1,20 @@ +#ifndef MAILCORE_MCMAINTHREAD_H + +#define MAILCORE_MCMAINTHREAD_H + +#ifdef __cplusplus + +namespace mailcore { + void callOnMainThread(void (*)(void *), void * context); + void callOnMainThreadAndWait(void (*)(void *), void * context); + + // Returns a "call" object. + void * callAfterDelay(void (*)(void *), void * context, double time); + + // Pass the pointer returns by callAfterDelay() to cancel a delayed call. + void cancelDelayedCall(void * call); +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCMessageBuilder.h b/MailCore.framework/Versions/A/Headers/MCMessageBuilder.h new file mode 100644 index 0000000..413d1a4 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCMessageBuilder.h @@ -0,0 +1,68 @@ +#ifndef MAILCORE_MCMESSAGEBUILDER_H + +#define MAILCORE_MCMESSAGEBUILDER_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Attachment; + class HTMLRendererTemplateCallback; + + class MessageBuilder : public AbstractMessage { + public: + MessageBuilder(); + virtual ~MessageBuilder(); + + virtual void setHTMLBody(String * htmlBody); + virtual String * htmlBody(); + + virtual void setTextBody(String * textBody); + virtual String * textBody(); + + virtual void setAttachments(Array * /* Attachment */ attachments); + virtual Array * /* Attachment */ attachments(); + virtual void addAttachment(Attachment * attachment); + + // attachments (usually images) that are included in HTML. + // a Content-ID should be assigned to these part to be able to reference + // them in the HTML using a cid: URL. + virtual void setRelatedAttachments(Array * /* Attachment */ attachments); + virtual Array * /* Attachment */ relatedAttachments(); + virtual void addRelatedAttachment(Attachment * attachment); + + // When boundary needs to be prefixed (to go through spam filters). + virtual void setBoundaryPrefix(String * boundaryPrefix); + virtual String * boundaryPrefix(); + + virtual Data * data(); + + virtual String * htmlRendering(HTMLRendererTemplateCallback * htmlCallback = NULL); + virtual String * htmlBodyRendering(); + + virtual String * plainTextRendering(); + virtual String * plainTextBodyRendering(bool stripWhitespace); + + public: // subclass behavior + MessageBuilder(MessageBuilder * other); + virtual String * description(); + virtual Object * copy(); + + private: + String * mHTMLBody; + String * mTextBody; + Array * /* Attachment */ mAttachments; + Array * /* Attachment */ mRelatedAttachments; + String * mBoundaryPrefix; + void init(); + Data * dataAndFilterBcc(bool filterBcc); + }; + +}; + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCMessageConstants.h b/MailCore.framework/Versions/A/Headers/MCMessageConstants.h new file mode 100644 index 0000000..145d991 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCMessageConstants.h @@ -0,0 +1,275 @@ +#ifndef MAILCORE_MCMESSAGECONSTANTS_H + +#define MAILCORE_MCMESSAGECONSTANTS_H + +#ifdef __cplusplus + +namespace mailcore { + + enum ConnectionType { + ConnectionTypeClear = 1 << 0, + ConnectionTypeStartTLS = 1 << 1, + ConnectionTypeTLS = 1 << 2, + }; + + enum AuthType { + AuthTypeSASLNone = 0, + AuthTypeSASLCRAMMD5 = 1 << 0, + AuthTypeSASLPlain = 1 << 1, + AuthTypeSASLGSSAPI = 1 << 2, + AuthTypeSASLDIGESTMD5 = 1 << 3, + AuthTypeSASLLogin = 1 << 4, + AuthTypeSASLSRP = 1 << 5, + AuthTypeSASLNTLM = 1 << 6, + AuthTypeSASLKerberosV4 = 1 << 7, + AuthTypeXOAuth2 = 1 << 8, + AuthTypeXOAuth2Outlook = 1 << 9, + }; + + enum IMAPFolderFlag { + IMAPFolderFlagNone = 0, + IMAPFolderFlagMarked = 1 << 0, + IMAPFolderFlagUnmarked = 1 << 1, + IMAPFolderFlagNoSelect = 1 << 2, + IMAPFolderFlagNoInferiors = 1 << 3, + IMAPFolderFlagInbox = 1 << 4, + IMAPFolderFlagSentMail = 1 << 5, + IMAPFolderFlagStarred = 1 << 6, + IMAPFolderFlagAllMail = 1 << 7, + IMAPFolderFlagTrash = 1 << 8, + IMAPFolderFlagDrafts = 1 << 9, + IMAPFolderFlagSpam = 1 << 10, + IMAPFolderFlagImportant = 1 << 11, + IMAPFolderFlagArchive = 1 << 12, + IMAPFolderFlagAll = IMAPFolderFlagAllMail, + IMAPFolderFlagJunk = IMAPFolderFlagSpam, + IMAPFolderFlagFlagged = IMAPFolderFlagStarred, + IMAPFolderFlagFolderTypeMask = IMAPFolderFlagInbox | IMAPFolderFlagSentMail | IMAPFolderFlagStarred | IMAPFolderFlagAllMail | + IMAPFolderFlagTrash| IMAPFolderFlagDrafts | IMAPFolderFlagSpam | IMAPFolderFlagImportant | IMAPFolderFlagArchive, + }; + + enum MessageFlag { + MessageFlagNone = 0, + MessageFlagSeen = 1 << 0, + MessageFlagAnswered = 1 << 1, + MessageFlagFlagged = 1 << 2, + MessageFlagDeleted = 1 << 3, + MessageFlagDraft = 1 << 4, + MessageFlagMDNSent = 1 << 5, + MessageFlagForwarded = 1 << 6, + MessageFlagSubmitPending = 1 << 7, + MessageFlagSubmitted = 1 << 8, + MessageFlagMaskAll = MessageFlagSeen | MessageFlagAnswered | MessageFlagFlagged | + MessageFlagDeleted | MessageFlagDraft | MessageFlagMDNSent | MessageFlagForwarded | + MessageFlagSubmitPending | MessageFlagSubmitted, + } ; + + enum IMAPMessagesRequestKind { + IMAPMessagesRequestKindUid = 0, // This is the default and it's always fetched + IMAPMessagesRequestKindFlags = 1 << 0, + IMAPMessagesRequestKindHeaders = 1 << 1, + IMAPMessagesRequestKindStructure = 1 << 2, + IMAPMessagesRequestKindInternalDate = 1 << 3, + IMAPMessagesRequestKindFullHeaders = 1 << 4, + IMAPMessagesRequestKindHeaderSubject = 1 << 5, + IMAPMessagesRequestKindGmailLabels = 1 << 6, + IMAPMessagesRequestKindGmailMessageID = 1 << 7, + IMAPMessagesRequestKindGmailThreadID = 1 << 8, + IMAPMessagesRequestKindExtraHeaders = 1 << 9, + IMAPMessagesRequestKindSize = 1 << 10, + }; + + enum IMAPFetchRequestType { + IMAPFetchRequestTypeUID = 0, + IMAPFetchRequestTypeSequence = 1 + }; + + enum IMAPStoreFlagsRequestKind { + IMAPStoreFlagsRequestKindAdd, + IMAPStoreFlagsRequestKindRemove, + IMAPStoreFlagsRequestKindSet, + }; + + enum IMAPWorkaround { + IMAPWorkaroundGmail = 1 << 0, + IMAPWorkaroundYahoo = 1 << 1, + IMAPWorkaroundExchange2003 = 1 << 2, + }; + + enum IMAPCapability { + IMAPCapabilityACL, + IMAPCapabilityBinary, + IMAPCapabilityCatenate, + IMAPCapabilityChildren, + IMAPCapabilityCompressDeflate, + IMAPCapabilityCondstore, + IMAPCapabilityEnable, + IMAPCapabilityIdle, + IMAPCapabilityId, + IMAPCapabilityLiteralPlus, + IMAPCapabilityMultiAppend, + IMAPCapabilityNamespace, + IMAPCapabilityQResync, + IMAPCapabilityQuota, + IMAPCapabilitySort, + IMAPCapabilityStartTLS, + IMAPCapabilityThreadOrderedSubject, + IMAPCapabilityThreadReferences, + IMAPCapabilityUIDPlus, + IMAPCapabilityUnselect, + IMAPCapabilityXList, + IMAPCapabilityAuthAnonymous, + IMAPCapabilityAuthCRAMMD5, + IMAPCapabilityAuthDigestMD5, + IMAPCapabilityAuthExternal, + IMAPCapabilityAuthGSSAPI, + IMAPCapabilityAuthKerberosV4, + IMAPCapabilityAuthLogin, + IMAPCapabilityAuthNTLM, + IMAPCapabilityAuthOTP, + IMAPCapabilityAuthPlain, + IMAPCapabilityAuthSKey, + IMAPCapabilityAuthSRP, + IMAPCapabilityXOAuth2, + IMAPCapabilityGmail, + }; + + enum POPCapability { + POPCapabilityNone, + POPCapabilityStartTLS, + POPCapabilityTop, + POPCapabilityUser, + POPCapabilityRespCodes, + POPCapabilityPipelining, + POPCapabilityUIDL, + POPCapabilitySASL, + POPCapabilityAuthAnonymous, + POPCapabilityAuthCRAMMD5, + POPCapabilityAuthDigestMD5, + POPCapabilityAuthExternal, + POPCapabilityAuthGSSAPI, + POPCapabilityAuthKerberosV4, + POPCapabilityAuthLogin, + POPCapabilityAuthNTLM, + POPCapabilityAuthOTP, + POPCapabilityAuthPlain, + POPCapabilityAuthSKey, + POPCapabilityAuthSRP, + }; + + enum Encoding { + Encoding7Bit = 0, // should match MAILIMAP_BODY_FLD_ENC_7BIT + Encoding8Bit = 1, // should match MAILIMAP_BODY_FLD_ENC_8BIT + EncodingBinary = 2, // should match MAILIMAP_BODY_FLD_ENC_BINARY + EncodingBase64 = 3, // should match MAILIMAP_BODY_FLD_ENC_BASE64 + EncodingQuotedPrintable = 4, // should match MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE + EncodingOther = 5, // should match MAILIMAP_BODY_FLD_ENC_OTHER + // negative values should be used for other encoding + EncodingUUEncode = -1 + }; + + enum IMAPSearchKind { + IMAPSearchKindAll, + IMAPSearchKindNone, + IMAPSearchKindFrom, + IMAPSearchKindTo, + IMAPSearchKindCc, + IMAPSearchKindBcc, + IMAPSearchKindRecipient, // Recipient is the combination of To, Cc and Bcc + IMAPSearchKindSubject, + IMAPSearchKindContent, + IMAPSearchKindBody, + IMAPSearchKindUIDs, + IMAPSearchKindHeader, + IMAPSearchKindRead, + IMAPSearchKindUnread, + IMAPSearchKindFlagged, + IMAPSearchKindUnflagged, + IMAPSearchKindAnswered, + IMAPSearchKindUnanswered, + IMAPSearchKindDraft, + IMAPSearchKindUndraft, + IMAPSearchKindDeleted, + IMAPSearchKindSpam, + IMAPSearchKindBeforeDate, + IMAPSearchKindOnDate, + IMAPSearchKindSinceDate, + IMAPSearchKindBeforeReceivedDate, + IMAPSearchKindOnReceivedDate, + IMAPSearchKindSinceReceivedDate, + IMAPSearchKindSizeLarger, + IMAPSearchKindSizeSmaller, + IMAPSearchKindGmailThreadID, + IMAPSearchKindGmailMessageID, + IMAPSearchKindGmailRaw, + IMAPSearchKindOr, + IMAPSearchKindAnd, + IMAPSearchKindNot, + }; + + enum ErrorCode { + ErrorNone, + ErrorConnection, + ErrorTLSNotAvailable, + ErrorParse, + ErrorCertificate, + ErrorAuthentication, + ErrorGmailIMAPNotEnabled, + ErrorGmailExceededBandwidthLimit, + ErrorGmailTooManySimultaneousConnections, + ErrorMobileMeMoved, + ErrorYahooUnavailable, + ErrorNonExistantFolder, + ErrorRename, + ErrorDelete, + ErrorCreate, + ErrorSubscribe, + ErrorAppend, + ErrorCopy, + ErrorExpunge, + ErrorFetch, + ErrorIdle, + ErrorIdentity, + ErrorNamespace, + ErrorStore, + ErrorCapability, + ErrorStartTLSNotAvailable, + ErrorSendMessageIllegalAttachment, + ErrorStorageLimit, + ErrorSendMessageNotAllowed, + ErrorNeedsConnectToWebmail, + ErrorSendMessage, + ErrorAuthenticationRequired, + ErrorFetchMessageList, + ErrorDeleteMessage, + ErrorInvalidAccount, + ErrorFile, + ErrorCompression, + ErrorNoSender, + ErrorNoRecipient, + ErrorNoop, + }; + + enum PartType { + PartTypeSingle, + PartTypeMessage, + PartTypeMultipartMixed, + PartTypeMultipartRelated, + PartTypeMultipartAlternative, + PartTypeMultipartSigned, + }; + + // Private type - It should not be used directly. + enum IMAPMessageRenderingType { + IMAPMessageRenderingTypeHTML, + IMAPMessageRenderingTypeHTMLBody, + IMAPMessageRenderingTypePlainText, + IMAPMessageRenderingTypePlainTextBody, + IMAPMessageRenderingTypePlainTextBodyAndStripWhitespace, + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCMessageHeader.h b/MailCore.framework/Versions/A/Headers/MCMessageHeader.h new file mode 100644 index 0000000..51b1e2f --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCMessageHeader.h @@ -0,0 +1,112 @@ +#ifndef MAILCORE_MCMESSAGEHEADER_H + +#define MAILCORE_MCMESSAGEHEADER_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Address; + + class MessageHeader : public Object { + public: + MessageHeader(); + virtual ~MessageHeader(); + + virtual void setMessageID(String * messageID); + virtual String * messageID(); + + virtual bool isMessageIDAutoGenerated(); + + virtual void setReferences(Array * /* String */ references); + virtual Array * /* String */ references(); + + virtual void setInReplyTo(Array * /* String */ inReplyTo); + virtual Array * /* String */ inReplyTo(); + + virtual void setDate(time_t date); + virtual time_t date(); + + virtual void setReceivedDate(time_t date); + virtual time_t receivedDate(); + + virtual void setSender(Address * sender); + virtual Address * sender(); + + virtual void setFrom(Address * from); + virtual Address * from(); + + virtual void setTo(Array * /* Address */ to); + virtual Array * /* Address */ to(); + + virtual void setCc(Array * /* Address */ cc); + virtual Array * /* Address */ cc(); + + virtual void setBcc(Array * /* Address */ bcc); + virtual Array * /* Address */ bcc(); + + virtual void setReplyTo(Array * /* Address */ replyTo); + virtual Array * /* Address */ replyTo(); + + virtual void setSubject(String * subject); + virtual String * subject(); + + virtual void setUserAgent(String * userAgent); + virtual String * userAgent(); + + virtual void setExtraHeader(String *name, String * value); + virtual void removeExtraHeader(String *name); + virtual String * extraHeaderValueForName(String *name); + virtual Array * allExtraHeadersNames(); + + String * extractedSubject(); + virtual String * partialExtractedSubject(); + virtual void importHeadersData(Data * data); + + virtual MessageHeader * replyHeader(bool replyAll, Array * addressesExcludedFromRecipient); + virtual MessageHeader * forwardHeader(); + + public: // subclass behavior + MessageHeader(MessageHeader * other); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + public: // private + virtual void importIMAPEnvelope(struct mailimap_envelope * env); + virtual void importIMAPReferences(Data * data); + virtual void importIMAPInternalDate(struct mailimap_date_time * date); + + virtual struct mailimf_fields * createIMFFieldsAndFilterBcc(bool filterBcc); + virtual void importIMFFields(struct mailimf_fields * fields); + + private: + String * mMessageID; + bool mMessageIDAutoGenerated; + Array * /* String */ mReferences; + Array * /* String */ mInReplyTo; + Address * mSender; + Address * mFrom; + Array * /* Address */ mTo; + Array * /* Address */ mCc; + Array * /* Address */ mBcc; + Array * /* Address */ mReplyTo; + String * mSubject; + time_t mDate; + time_t mReceivedDate; + HashMap * mExtraHeaders; + HashMap * mlcExtraHeaders; + void init(bool generateDate, bool generateMessageID); + void setExtraHeaders(HashMap *headers); + Array * recipientWithReplyAll(bool replyAll, bool includeTo, bool includeCc, Array * senderEmails); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCMessageParser.h b/MailCore.framework/Versions/A/Headers/MCMessageParser.h new file mode 100644 index 0000000..11de9b5 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCMessageParser.h @@ -0,0 +1,51 @@ +#ifndef MAILCORE_MCPARSEDMESSAGE_H + +#define MAILCORE_MCPARSEDMESSAGE_H + +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class HTMLRendererTemplateCallback; + + class MessageParser : public AbstractMessage { + public: + static MessageParser * messageParserWithData(Data * data); + static MessageParser * messageParserWithContentsOfFile(String * filename); + + MessageParser(Data * data); + virtual ~MessageParser(); + + virtual AbstractPart * mainPart(); + virtual Data * data(); + + virtual String * htmlRendering(HTMLRendererTemplateCallback * htmlCallback = NULL); + virtual String * htmlBodyRendering(); + + virtual String * plainTextRendering(); + virtual String * plainTextBodyRendering(bool stripWhitespace); + + public: // subclass behavior + MessageParser(MessageParser * other); + virtual String * description(); + virtual Object * copy(); + + virtual AbstractPart * partForContentID(String * contentID); + virtual AbstractPart * partForUniqueID(String * uniqueID); + + private: + Data * mData; + AbstractPart * mMainPart; + void init(); + + }; + +}; + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCMessagePart.h b/MailCore.framework/Versions/A/Headers/MCMessagePart.h new file mode 100644 index 0000000..4b9de96 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCMessagePart.h @@ -0,0 +1,26 @@ +#ifndef MAILCORE_MCMESSAGEPART_H + +#define MAILCORE_MCMESSAGEPART_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MessagePart : public AbstractMessagePart { + public: + MessagePart(); + virtual ~MessagePart(); + + public: // subclass behavior + MessagePart(MessagePart * other); + virtual Object * copy(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCMultipart.h b/MailCore.framework/Versions/A/Headers/MCMultipart.h new file mode 100644 index 0000000..6b00c08 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCMultipart.h @@ -0,0 +1,26 @@ +#ifndef MAILCORE_MCMULTIPART_H + +#define MAILCORE_MCMULTIPART_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Multipart : public AbstractMultipart { + public: + Multipart(); + virtual ~Multipart(); + + public: // subclass behavior + Multipart(Multipart * other); + virtual Object * copy(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCNNTP.h b/MailCore.framework/Versions/A/Headers/MCNNTP.h new file mode 100644 index 0000000..c2da3a6 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCNNTP.h @@ -0,0 +1,9 @@ +#ifndef MAILCORE_MCNNTP_H + +#define MAILCORE_MCNNTP_H + +#include +#include +#include + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCNNTPAsyncSession.h b/MailCore.framework/Versions/A/Headers/MCNNTPAsyncSession.h new file mode 100644 index 0000000..66f0cc0 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCNNTPAsyncSession.h @@ -0,0 +1,85 @@ +#ifndef MAILCORE_MCNNTPASYNCSESSION_H + +#define MAILCORE_MCNNTPASYNCSESSION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class NNTPOperation; + class NNTPSession; + class NNTPFetchHeaderOperation; + class NNTPFetchArticleOperation; + class MCNNTPFetchArticlesOperation; + class NNTPListNewsgroupsOperation; + class NNTPOperationQueueCallback; + class NNTPConnectionLogger; + + class NNTPAsyncSession : public Object { + public: + NNTPAsyncSession(); + virtual ~NNTPAsyncSession(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * login); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + +#ifdef __APPLE__ + virtual void setDispatchQueue(dispatch_queue_t dispatchQueue); + virtual dispatch_queue_t dispatchQueue(); +#endif + + virtual MCNNTPFetchArticlesOperation * fetchArticlesOperation(String * group); + + virtual NNTPFetchHeaderOperation * fetchHeaderOperation(String * groupName, unsigned int index); + + virtual NNTPFetchArticleOperation * fetchArticleOperation(String *groupName, unsigned int index); + + virtual NNTPListNewsgroupsOperation * listAllNewsgroupsOperation(); + virtual NNTPListNewsgroupsOperation * listSubscribedNewsgroupsOperation(); + + virtual NNTPOperation * disconnectOperation(); + + virtual NNTPOperation * checkAccountOperation(); + + private: + NNTPSession * mSession; + OperationQueue * mQueue; + NNTPOperationQueueCallback * mQueueCallback; + ConnectionLogger * mConnectionLogger; + pthread_mutex_t mConnectionLoggerLock; + NNTPConnectionLogger * mInternalLogger; + + public: // private + virtual void runOperation(NNTPOperation * operation); + virtual NNTPSession * session(); + virtual void logConnection(ConnectionLogType logType, Data * buffer); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCNNTPCheckAccountOperation.h b/MailCore.framework/Versions/A/Headers/MCNNTPCheckAccountOperation.h new file mode 100644 index 0000000..28db9c5 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCNNTPCheckAccountOperation.h @@ -0,0 +1,32 @@ +// +// MCNNTPCheckAccountOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPCHECKACCOUNTOPERATION_H + +#define MAILCORE_MCNNTPCHECKACCOUNTOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class NNTPCheckAccountOperation : public NNTPOperation { + public: + NNTPCheckAccountOperation(); + virtual ~NNTPCheckAccountOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCNNTPFetchArticleOperation.h b/MailCore.framework/Versions/A/Headers/MCNNTPFetchArticleOperation.h new file mode 100644 index 0000000..4f607c4 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCNNTPFetchArticleOperation.h @@ -0,0 +1,45 @@ +// +// MCMCNNTPFetchArticlesOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPFETCHARTICLEOPERATION_H + +#define MAILCORE_MCNNTPFETCHARTICLEOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + class NNTPFetchArticleOperation : public NNTPOperation { + public: + NNTPFetchArticleOperation(); + virtual ~NNTPFetchArticleOperation(); + + virtual void setGroupName(String * groupName); + virtual String * groupName(); + + virtual void setMessageIndex(unsigned int messageIndex); + virtual unsigned int messageIndex(); + + virtual Data * data(); + + public: // subclass behavior + virtual void main(); + + private: + String * mGroupName; + unsigned int mMessageIndex; + Data * mData; + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCNNTPFetchArticlesOperation.h b/MailCore.framework/Versions/A/Headers/MCNNTPFetchArticlesOperation.h new file mode 100644 index 0000000..fa0037c --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCNNTPFetchArticlesOperation.h @@ -0,0 +1,41 @@ +// +// MCMCNNTPFetchArticlesOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPFETCHARTICLESOPERATION_H + +#define MAILCORE_MCNNTPFETCHARTICLESOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MCNNTPFetchArticlesOperation : public NNTPOperation { + public: + MCNNTPFetchArticlesOperation(); + virtual ~MCNNTPFetchArticlesOperation(); + + virtual void setGroupName(String * groupName); + virtual String * groupName(); + + virtual IndexSet * articles(); + + public: // subclass behavior + virtual void main(); + + private: + String * mGroupName; + IndexSet * mArticles; + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCNNTPFetchHeaderOperation.h b/MailCore.framework/Versions/A/Headers/MCNNTPFetchHeaderOperation.h new file mode 100644 index 0000000..97b12b0 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCNNTPFetchHeaderOperation.h @@ -0,0 +1,48 @@ +// +// MCNNTPFetchHeaderOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPFETCHHEADEROPERATION_H + +#define MAILCORE_MCNNTPFETCHHEADEROPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MessageHeader; + + class NNTPFetchHeaderOperation : public NNTPOperation { + public: + NNTPFetchHeaderOperation(); + virtual ~NNTPFetchHeaderOperation(); + + virtual void setGroupName(String * groupName); + virtual String * groupName(); + + virtual void setMessageIndex(unsigned int messageIndex); + virtual unsigned int messageIndex(); + + virtual MessageHeader * header(); + + public: // subclass behavior + virtual void main(); + + private: + String * mGroupName; + unsigned int mMessageIndex; + MessageHeader * mHeader; + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCNNTPGroupInfo.h b/MailCore.framework/Versions/A/Headers/MCNNTPGroupInfo.h new file mode 100644 index 0000000..aeab58c --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCNNTPGroupInfo.h @@ -0,0 +1,38 @@ +#ifndef MAILCORE_MCNNTPGROUPINFO_H + +#define MAILCORE_MCNNTPGROUPINFO_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class NNTPGroupInfo : public Object { + public: + NNTPGroupInfo(); + virtual ~NNTPGroupInfo(); + + virtual void setName(String * uid); + virtual String * name(); + + virtual void setMessageCount(uint32_t messages); + virtual uint32_t messageCount(); + + public: // subclass behavior + NNTPGroupInfo(NNTPGroupInfo * other); + virtual String * description(); + virtual Object * copy(); + + private: + String * mName; + uint32_t mMessageCount; + + void init(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCNNTPListNewsgroupsOperation.h b/MailCore.framework/Versions/A/Headers/MCNNTPListNewsgroupsOperation.h new file mode 100644 index 0000000..5415601 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCNNTPListNewsgroupsOperation.h @@ -0,0 +1,41 @@ +// +// MCNNTPListNewsgroupsMessagesOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPLISTNEWSGROUPSOPERATION_H + +#define MAILCORE_MCNNTPLISTNEWSGROUPSOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class NNTPListNewsgroupsOperation : public NNTPOperation { + public: + NNTPListNewsgroupsOperation(); + virtual ~NNTPListNewsgroupsOperation(); + + virtual void setListsSubscribed(bool listsSubscribed); + virtual bool listsSubscribed(); + + virtual Array * groups(); + + public: // subclass behavior + virtual void main(); + + private: + bool mListsSuscribed; + Array * /* NNTPGroupInfo */ mGroups; + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCNNTPOperation.h b/MailCore.framework/Versions/A/Headers/MCNNTPOperation.h new file mode 100644 index 0000000..fb40e9d --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCNNTPOperation.h @@ -0,0 +1,53 @@ +// +// MCNNTPOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPOPERATION_H + +#define MAILCORE_MCNNTPOPERATION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class NNTPAsyncSession; + class NNTPOperationCallback; + + class NNTPOperation : public Operation, public NNTPProgressCallback { + public: + NNTPOperation(); + virtual ~NNTPOperation(); + + virtual void setSession(NNTPAsyncSession * session); + virtual NNTPAsyncSession * session(); + + virtual void setNNTPCallback(NNTPOperationCallback * callback); + virtual NNTPOperationCallback * nntpCallback(); + + virtual void setError(ErrorCode error); + virtual ErrorCode error(); + + virtual void start(); + + private: + NNTPAsyncSession * mSession; + NNTPOperationCallback * mPopCallback; + ErrorCode mError; + private: + virtual void bodyProgress(NNTPSession * session, unsigned int current, unsigned int maximum); + virtual void bodyProgressOnMainThread(void * context); + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCNNTPOperationCallback.h b/MailCore.framework/Versions/A/Headers/MCNNTPOperationCallback.h new file mode 100644 index 0000000..f616661 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCNNTPOperationCallback.h @@ -0,0 +1,28 @@ +// +// MCNNTPOperationCallback.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNNTPOPERATIONCALLBACK_H + +#define MAILCORE_MCNNTPOPERATIONCALLBACK_H + +#ifdef __cplusplus + +namespace mailcore { + + class NNTPOperation; + + class NNTPOperationCallback { + public: + virtual void bodyProgress(NNTPOperation * session, unsigned int current, unsigned int maximum) {}; + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCNNTPProgressCallback.h b/MailCore.framework/Versions/A/Headers/MCNNTPProgressCallback.h new file mode 100644 index 0000000..f863cc0 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCNNTPProgressCallback.h @@ -0,0 +1,20 @@ +#ifndef MAILCORE_MCNNTPPROGRESSCALLBACK_H + +#define MAILCORE_MCNNTPPROGRESSCALLBACK_H + +#ifdef __cplusplus + +namespace mailcore { + + class NNTPSession; + + class NNTPProgressCallback { + public: + virtual void bodyProgress(NNTPSession * session, unsigned int current, unsigned int maximum) {}; + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCNNTPSession.h b/MailCore.framework/Versions/A/Headers/MCNNTPSession.h new file mode 100644 index 0000000..a6fb511 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCNNTPSession.h @@ -0,0 +1,88 @@ +#ifndef MAILCORE_MCNNTPSESSION_H +#define MAILCORE_MCNNTPSESSION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class NNTPProgressCallback; + class MessageHeader; + + class NNTPSession : public Object { + public: + NNTPSession(); + virtual ~NNTPSession(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * username); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void connect(ErrorCode * pError); + virtual void disconnect(); + + virtual void login(ErrorCode * pError); + + virtual void checkAccount(ErrorCode * pError); + + virtual Array * /* NNTPGroupInfo */ listAllNewsgroups(ErrorCode * pError); + virtual Array * listSubscribedNewsgroups(ErrorCode * pError); + + virtual MessageHeader * fetchHeader(String *groupName, unsigned int index, ErrorCode * pError); + + virtual IndexSet * fetchArticles(String * groupname, ErrorCode * pError); + + Data * fetchArticle(String *groupName, unsigned int index, NNTPProgressCallback * callback, ErrorCode * pError); + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + + private: + String * mHostname; + unsigned int mPort; + String * mUsername; + String * mPassword; + ConnectionType mConnectionType; + bool mCheckCertificateEnabled; + time_t mTimeout; + + newsnntp * mNNTP; + int mState; + + ConnectionLogger * mConnectionLogger; + + void init(); + bool checkCertificate(); + void setup(); + void unsetup(); + void connectIfNeeded(ErrorCode * pError); + void loginIfNeeded(ErrorCode * pError); + void readerIfNeeded(ErrorCode * pError); + void listIfNeeded(ErrorCode * pError); + void selectGroup(String * folder, ErrorCode * pError); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCNetService.h b/MailCore.framework/Versions/A/Headers/MCNetService.h new file mode 100644 index 0000000..aeb0c0f --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCNetService.h @@ -0,0 +1,59 @@ +// +// MCNetService.h +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNETSERVICE_H + +#define MAILCORE_MCNETSERVICE_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class NetService : public Object { + + public: + NetService(); + virtual ~NetService(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual String * normalizedHostnameWithEmail(String * email); + + public: // serialization + static NetService * serviceWithInfo(HashMap * info); + virtual HashMap * info(); + + public: //subclass behavior + NetService(NetService * other); + virtual String * description(); + virtual Object * copy(); + + private: + String * mHostname; + unsigned int mPort; + ConnectionType mConnectionType; + + void init(); + void fillWithInfo(HashMap * info); + }; + +} + +#endif + +#endif \ No newline at end of file diff --git a/MailCore.framework/Versions/A/Headers/MCNull.h b/MailCore.framework/Versions/A/Headers/MCNull.h new file mode 100644 index 0000000..d17eb10 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCNull.h @@ -0,0 +1,28 @@ +// +// MCNull.h +// hermes +// +// Created by DINH Viêt Hoà on 4/9/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCNULL_H + +#define MAILCORE_MCNULL_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Null : public Object { + public: + static Null * null(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOAbstract.h b/MailCore.framework/Versions/A/Headers/MCOAbstract.h new file mode 100644 index 0000000..e174b81 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOAbstract.h @@ -0,0 +1,23 @@ +// +// MCOAbstract.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/10/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOABSTRACT_H + +#define MAILCORE_MCOABSTRACT_H + +#import +#import +#import +#import +#import +#import +#import +#import +#import + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOAbstractMessage.h b/MailCore.framework/Versions/A/Headers/MCOAbstractMessage.h new file mode 100644 index 0000000..d917d82 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOAbstractMessage.h @@ -0,0 +1,49 @@ +// +// MCOAbstractMessage.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/10/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOABSTRACTMESSAGE_H + +#define MAILCORE_MCOABSTRACTMESSAGE_H + +#import + +@class MCOMessageHeader; +@class MCOAbstractPart; + +@interface MCOAbstractMessage : NSObject + +/** Header of the message. */ +@property (nonatomic, strong) MCOMessageHeader * header; + +/** Returns the part with the given Content-ID.*/ +- (MCOAbstractPart *) partForContentID:(NSString *)contentID; + +/** Returns the part with the given unique identifier.*/ +- (MCOAbstractPart *) partForUniqueID:(NSString *)uniqueID; + +/** All attachments in the message. + It will return an array of MCOIMAPPart for MCOIMAPMessage. + It will return an array of MCOAttachment for MCOMessageParser. + It will return an array of MCOAttachment for MCOMessageBuilder. */ +- (NSArray * /* MCOAbstractPart */) attachments; + +/** All image attachments included inline in the message through cid: URLs. + It will return an array of MCOIMAPPart for MCOIMAPMessage. + It will return an array of MCOAttachment for MCOMessageParser. + It will return an array of MCOAttachment for MCOMessageBuilder. */ +- (NSArray * /* MCOAbstractPart */) htmlInlineAttachments; + +/** + Returns parts required to render the message as plain text or html. + This does not include inline images and attachments, but only the text content + */ +- (NSArray *) requiredPartsForRendering; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOAbstractMessagePart.h b/MailCore.framework/Versions/A/Headers/MCOAbstractMessagePart.h new file mode 100644 index 0000000..b511748 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOAbstractMessagePart.h @@ -0,0 +1,30 @@ +// +// MCOAbstractMessagePart.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/10/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOABSTRACTMESSAGEPART_H + +#define MAILCORE_MCOABSTRACTMESSAGEPART_H + +#import +#import + +@class MCOMessageHeader; + +@interface MCOAbstractMessagePart : MCOAbstractPart + +// Returns the header of the embedded message. +@property (nonatomic, strong) MCOMessageHeader * header; + +// Returns the main part of the embedded message. It can be MCOAbstractPart, MCOAbstractMultipart +// or a MCOAbstractMessagePart. +@property (nonatomic, strong) MCOAbstractPart * mainPart; + +@end + +#endif + diff --git a/MailCore.framework/Versions/A/Headers/MCOAbstractMultipart.h b/MailCore.framework/Versions/A/Headers/MCOAbstractMultipart.h new file mode 100644 index 0000000..4502319 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOAbstractMultipart.h @@ -0,0 +1,23 @@ +// +// MCOAbstractMultipart.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/10/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOABSTRACTMULTIPART_H + +#define MAILCORE_MCOABSTRACTMULTIPART_H + +#import +#import + +@interface MCOAbstractMultipart : MCOAbstractPart + +/** Returns the subparts of that multipart.*/ +@property (nonatomic, copy) NSArray * /* MCOAbstractPart */ parts; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOAbstractPart.h b/MailCore.framework/Versions/A/Headers/MCOAbstractPart.h new file mode 100644 index 0000000..e30f09b --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOAbstractPart.h @@ -0,0 +1,87 @@ +// +// MCOAbstractPart.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/10/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOABSTRACTPART_H + +#define MAILCORE_MCOABSTRACTPART_H + +#import + +@class MCOAbstractMessage; + +typedef NS_ENUM(NSInteger, MCOPartType) { + // Used for a single part. + // The part will be a MCOAbstractPart. + MCOPartTypeSingle, + + // Used for a message part (MIME type: message/rfc822). + // The part will be a MCOAbstractMessagePart. + // It's when a message is sent as attachment of an other message. + MCOPartTypeMessage, + + // Used for a multipart, multipart/mixed. + // The part will be a MCOAbstractMultipart. + MCOPartTypeMultipartMixed, + + // Used for a multipart, multipart/related. + // The part will be a MCOAbstractMultipart. + MCOPartTypeMultipartRelated, + + // Used for a multipart, multipart/alternative. + // The part will be a MCOAbstractMultipart. + MCOPartTypeMultipartAlternative, + + // Used for a signed message, multipart/signed. + // The part will be a MCOAbstractMultipart. + MCOPartTypeMultipartSigned, +}; + +@interface MCOAbstractPart : NSObject + +/** Returns type of the part (single / message part / multipart/mixed, + multipart/related, multipart/alternative). See MCOPartType.*/ +@property (nonatomic, assign) MCOPartType partType; + +/** Returns filename of the part.*/ +@property (nonatomic, copy) NSString * filename; + +/** Returns MIME type of the part. For example application/data.*/ +@property (nonatomic, copy) NSString * mimeType; + +/** Returns charset of the part in case it's a text single part.*/ +@property (nonatomic, copy) NSString * charset; + +/** Returns the unique ID generated for this part. + It's a unique identifier that's created when the object is created manually + or created by the parser.*/ +@property (nonatomic, copy) NSString * uniqueID; + +/** Returns the value of the Content-ID field of the part.*/ +@property (nonatomic, copy) NSString * contentID; + +/** Returns the value of the Content-Location field of the part.*/ +@property (nonatomic, copy) NSString * contentLocation; + +/** Returns the value of the Content-Description field of the part.*/ +@property (nonatomic, copy) NSString * contentDescription; + +/** Returns whether the part is an explicit inline attachment.*/ +@property (nonatomic, assign, getter=isInlineAttachment) BOOL inlineAttachment; + +/** Returns the part with the given Content-ID among this part and its subparts.*/ +- (MCOAbstractPart *) partForContentID:(NSString *)contentID; + +/** Returns the part with the given unique identifier among this part and its subparts.*/ +- (MCOAbstractPart *) partForUniqueID:(NSString *)uniqueID; + +/** Returns a string representation of the data according to charset.*/ +- (NSString *) decodedStringForData:(NSData *)data; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOAddress.h b/MailCore.framework/Versions/A/Headers/MCOAddress.h new file mode 100644 index 0000000..6c3284e --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOAddress.h @@ -0,0 +1,81 @@ +// +// MCOAddress.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/10/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOADDRESS_H + +#define MAILCORE_MCOADDRESS_H + +#import + +@interface MCOAddress : NSObject + +/** Creates an address with a display name and a mailbox. + + Example: [MCOAddress addressWithDisplayName:@"DINH Viêt Hoà" mailbox:@"hoa@etpan.org"] */ ++ (MCOAddress *) addressWithDisplayName:(NSString *)displayName + mailbox:(NSString *)mailbox; + +/** Creates an address with only a mailbox. + + Example: [MCOAddress addressWithMailbox:@"hoa@etpan.org"]*/ ++ (MCOAddress *) addressWithMailbox:(NSString *)mailbox; + +/** Creates an address with a RFC822 string. + + Example: [MCOAddress addressWithRFC822String:@"DINH Vi=C3=AAt Ho=C3=A0 "]*/ ++ (MCOAddress *) addressWithRFC822String:(NSString *)RFC822String; + +/** Creates an address with a non-MIME-encoded RFC822 string. + + Example: [MCOAddress addressWithNonEncodedRFC822String:@"DINH Viêt Hoà "]*/ ++ (MCOAddress *) addressWithNonEncodedRFC822String:(NSString *)nonEncodedRFC822String; + +/** + Returns an NSArray of MCOAddress objects that contain the parsed + forms of the RFC822 encoded addresses. + + For example: @[ @"DINH Vi=C3=AAt Ho=C3=A0 " ]*/ ++ (NSArray *) addressesWithRFC822String:(NSString *)string; + +/** + Returns an NSArray of MCOAddress objects that contain the parsed + forms of non-encoded RFC822 addresses. + + For example: @[ "DINH Viêt Hoà " ]*/ ++ (NSArray *) addressesWithNonEncodedRFC822String:(NSString *)string; + + +/** Returns the display name of the address.*/ +@property (nonatomic, copy) NSString * displayName; + +/** Returns the mailbox of the address.*/ +@property (nonatomic, copy) NSString * mailbox; + +/** Returns the RFC822 encoding of the address. + + For example: "DINH Vi=C3=AAt Ho=C3=A0 "*/ +- (NSString *) RFC822String; + +/** Returns the non-MIME-encoded RFC822 encoding of the address. + + For example: "DINH Viêt Hoà "*/ +- (NSString *) nonEncodedRFC822String; + +@end + +@interface NSArray (MCOAddress) + +/** Returns the RFC822 encoding of the addresses.*/ +- (NSString *) mco_RFC822StringForAddresses; + +/** Returns the non-MIME-encoded RFC822 of the addresses.*/ +- (NSString *) mco_nonEncodedRFC822StringForAddresses; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOAttachment.h b/MailCore.framework/Versions/A/Headers/MCOAttachment.h new file mode 100644 index 0000000..954a825 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOAttachment.h @@ -0,0 +1,59 @@ +// +// MCOAttachment.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/22/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOATTACHMENT_H + +#define MAILCORE_MCOATTACHMENT_H + +#import + +/** This is a single part. + + It can either parsed from RFC 822 message data or created to build a message.*/ + +@interface MCOAttachment : MCOAbstractPart + +/** Returns a MIME type for a filename.*/ ++ (NSString *) mimeTypeForFilename:(NSString *)filename; + +/** Returns a file attachment with the content of the given file.*/ ++ (MCOAttachment *) attachmentWithContentsOfFile:(NSString *)filename; + +/** Returns a file attachment with the given data and filename.*/ ++ (MCOAttachment *) attachmentWithData:(NSData *)data filename:(NSString *)filename; + +/** Returns a part with an HTML content.*/ ++ (MCOAttachment *) attachmentWithHTMLString:(NSString *)htmlString; + +/** Returns a part with a RFC 822 messsage attachment.*/ ++ (MCOAttachment *) attachmentWithRFC822Message:(NSData *)messageData; + +/** Returns a part with an plain text content.*/ ++ (MCOAttachment *) attachmentWithText:(NSString *)text; + +/** Decoded data of the part.*/ +@property (nonatomic, strong) NSData * data; + +/** Returns string representation according to charset*/ +- (NSString *) decodedString; + +/** Adds a content type parameter.*/ +- (void) setContentTypeParameterValue:(NSString *)value forName:(NSString *)name; + +/** Remove a given content type parameter.*/ +- (void) removeContentTypeParameterForName:(NSString *)name; + +/** Returns the value of a given content type parameter.*/ +- (NSString *) contentTypeParameterValueForName:(NSString *)name; + +/** Returns an array with the names of all content type parameters.*/ +- (NSArray * /* NSString */) allContentTypeParametersNames; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOConstants.h b/MailCore.framework/Versions/A/Headers/MCOConstants.h new file mode 100644 index 0000000..85c9241 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOConstants.h @@ -0,0 +1,438 @@ +#ifndef MAILCORE_MCOCONSTANTS_H + +#define MAILCORE_MCOCONSTANTS_H + +/** It's the connection type.*/ +typedef NS_OPTIONS(NSInteger, MCOConnectionType) { + /** Clear-text connection for the protocol.*/ + MCOConnectionTypeClear = 1 << 0, + /** Clear-text connection at the beginning, then switch to encrypted connection using TLS/SSL*/ + /** on the same TCP connection.*/ + MCOConnectionTypeStartTLS = 1 << 1, + /** Encrypted connection using TLS/SSL.*/ + MCOConnectionTypeTLS = 1 << 2, +}; + +/** It's the authentication type.*/ +typedef NS_OPTIONS(NSInteger, MCOAuthType) { + /** Default authentication scheme of the protocol.*/ + MCOAuthTypeSASLNone = 0, + /** CRAM-MD5 authentication RFC 2195.*/ + MCOAuthTypeSASLCRAMMD5 = 1 << 0, + /** PLAIN authentication RFC 4616.*/ + MCOAuthTypeSASLPlain = 1 << 1, + /** GSSAPI authentication.*/ + MCOAuthTypeSASLGSSAPI = 1 << 2, + /** DIGEST-MD5 authentication RFC 2831.*/ + MCOAuthTypeSASLDIGESTMD5 = 1 << 3, + /** LOGIN authentication http://tools.ietf.org/id/draft-murchison-sasl-login-00.txt*/ + MCOAuthTypeSASLLogin = 1 << 4, + /** Secure Remote Password Authentication http://tools.ietf.org/html/draft-burdis-cat-srp-sasl-08*/ + MCOAuthTypeSASLSRP = 1 << 5, + /** NTLM authentication.*/ + MCOAuthTypeSASLNTLM = 1 << 6, + /** Kerberos 4 authentication.*/ + MCOAuthTypeSASLKerberosV4 = 1 << 7, + /** OAuth2 authentication.*/ + MCOAuthTypeXOAuth2 = 1 << 8, + /** OAuth2 authentication on outlook.com.*/ + MCOAuthTypeXOAuth2Outlook = 1 << 9, +}; + +/** It's the IMAP flags of the folder.*/ +typedef NS_OPTIONS(NSInteger, MCOIMAPFolderFlag) { + MCOIMAPFolderFlagNone = 0, + /** \Marked*/ + MCOIMAPFolderFlagMarked = 1 << 0, + /** \Unmarked*/ + MCOIMAPFolderFlagUnmarked = 1 << 1, + /** \NoSelect: When a folder can't be selected.*/ + MCOIMAPFolderFlagNoSelect = 1 << 2, + /** \NoInferiors: When the folder has no children.*/ + MCOIMAPFolderFlagNoInferiors = 1 << 3, + /** \Inbox: When the folder is the inbox.*/ + MCOIMAPFolderFlagInbox = 1 << 4, + /** \Sent: When the folder is the sent folder.*/ + MCOIMAPFolderFlagSentMail = 1 << 5, + /** \Starred: When the folder is the starred folder*/ + MCOIMAPFolderFlagStarred = 1 << 6, + /** \AllMail: When the folder is all mail.*/ + MCOIMAPFolderFlagAllMail = 1 << 7, + /** \Trash: When the folder is the trash.*/ + MCOIMAPFolderFlagTrash = 1 << 8, + /** \Drafts: When the folder is the drafts folder.*/ + MCOIMAPFolderFlagDrafts = 1 << 9, + /** \Spam: When the folder is the spam folder.*/ + MCOIMAPFolderFlagSpam = 1 << 10, + /** \Important: When the folder is the important folder.*/ + MCOIMAPFolderFlagImportant = 1 << 11, + /** \Archive: When the folder is archive.*/ + MCOIMAPFolderFlagArchive = 1 << 12, + /** \All: When the folder contains all mails, similar to \AllMail.*/ + MCOIMAPFolderFlagAll = MCOIMAPFolderFlagAllMail, + /** \Junk: When the folder is the spam folder.*/ + MCOIMAPFolderFlagJunk = MCOIMAPFolderFlagSpam, + /** \Flagged: When the folder contains all the flagged emails.*/ + MCOIMAPFolderFlagFlagged = MCOIMAPFolderFlagStarred, + /** Mask to identify the folder */ + MCOIMAPFolderFlagFolderTypeMask = MCOIMAPFolderFlagInbox | MCOIMAPFolderFlagSentMail | MCOIMAPFolderFlagStarred | MCOIMAPFolderFlagAllMail | + MCOIMAPFolderFlagTrash| MCOIMAPFolderFlagDrafts | MCOIMAPFolderFlagSpam | MCOIMAPFolderFlagImportant | MCOIMAPFolderFlagArchive, +}; + +/** It's the flags of a message.*/ +typedef NS_OPTIONS(NSInteger, MCOMessageFlag) { + MCOMessageFlagNone = 0, + /** Seen/Read flag.*/ + MCOMessageFlagSeen = 1 << 0, + /** Replied/Answered flag.*/ + MCOMessageFlagAnswered = 1 << 1, + /** Flagged/Starred flag.*/ + MCOMessageFlagFlagged = 1 << 2, + /** Deleted flag.*/ + MCOMessageFlagDeleted = 1 << 3, + /** Draft flag.*/ + MCOMessageFlagDraft = 1 << 4, + /** $MDNSent flag.*/ + MCOMessageFlagMDNSent = 1 << 5, + /** $Forwarded flag.*/ + MCOMessageFlagForwarded = 1 << 6, + /** $SubmitPending flag.*/ + MCOMessageFlagSubmitPending = 1 << 7, + /** $Submitted flag.*/ + MCOMessageFlagSubmitted = 1 << 8, +}; + +/** It's the encoding of a part.*/ +typedef NS_ENUM(NSInteger, MCOEncoding) { + /** 7bit encoding.*/ + MCOEncoding7Bit = 0, /** should match MAILIMAP_BODY_FLD_ENC_7BIT*/ + /** 8bit encoding.*/ + MCOEncoding8Bit = 1, /** should match MAILIMAP_BODY_FLD_ENC_8BIT*/ + /** binary encoding.*/ + MCOEncodingBinary = 2, /** should match MAILIMAP_BODY_FLD_ENC_BINARY*/ + /** base64 encoding.*/ + MCOEncodingBase64 = 3, /** should match MAILIMAP_BODY_FLD_ENC_BASE64*/ + /** quoted-printable encoding.*/ + MCOEncodingQuotedPrintable = 4, /** should match MAILIMAP_BODY_FLD_ENC_QUOTED_PRINTABLE*/ + /** other encoding.*/ + MCOEncodingOther = 5, /** should match MAILIMAP_BODY_FLD_ENC_OTHER*/ + + /** Negative values should be used for encoding not supported by libetpan.*/ + + /** UUEncode encoding.*/ + MCOEncodingUUEncode = -1 +}; + +/** It's the information to fetch for a given message in the IMAP FETCH request.*/ +typedef NS_OPTIONS(NSInteger, MCOIMAPMessagesRequestKind) { + /** UID of the message.*/ + MCOIMAPMessagesRequestKindUid = 0, /** This is the default and it's always fetched*/ + /** Flags of the message.*/ + MCOIMAPMessagesRequestKindFlags = 1 << 0, + /** Headers of the message (parsed by the server).*/ + MCOIMAPMessagesRequestKindHeaders = 1 << 1, + /** MIME structure of the message.*/ + MCOIMAPMessagesRequestKindStructure = 1 << 2, + /** Received date.*/ + MCOIMAPMessagesRequestKindInternalDate = 1 << 3, + /** Headers through headers data.*/ + MCOIMAPMessagesRequestKindFullHeaders = 1 << 4, + /** Subject of the message.*/ + MCOIMAPMessagesRequestKindHeaderSubject = 1 << 5, + /** Gmail Labels.*/ + MCOIMAPMessagesRequestKindGmailLabels = 1 << 6, + /** Gmail Message ID.*/ + MCOIMAPMessagesRequestKindGmailMessageID = 1 << 7, + /** Gmail Thread ID.*/ + MCOIMAPMessagesRequestKindGmailThreadID = 1 << 8, + /** Extra Headers.*/ + MCOIMAPMessagesRequestKindExtraHeaders = 1 << 9, + /* Request size of message */ + MCOIMAPMessagesRequestKindSize = 1 << 10, + +}; + +/** It defines the behavior of the STORE flags request.*/ +typedef NS_ENUM(NSInteger, MCOIMAPStoreFlagsRequestKind) { + /** Add the given flags.*/ + MCOIMAPStoreFlagsRequestKindAdd, + /** Remove the given flags.*/ + MCOIMAPStoreFlagsRequestKindRemove, + /** Set the given flags.*/ + MCOIMAPStoreFlagsRequestKindSet, +}; + +/** It's the search type.*/ +typedef NS_ENUM(NSInteger, MCOIMAPSearchKind) { + /** Search All */ + MCOIMAPSearchKindAll, + /** No search.*/ + MCOIMAPSearchKindNone, + /** Match sender.*/ + MCOIMAPSearchKindFrom, + /** Match to */ + MCOIMAPSearchKindTo, + /** Match CC: */ + MCOIMAPSearchKindCc, + /** Match BCC: */ + MCOIMAPSearchKindBcc, + /** Match recipient.*/ + MCOIMAPSearchKindRecipient, + /** Match subject.*/ + MCOIMAPSearchKindSubject, + /** Match content of the message, including the headers.*/ + MCOIMAPSearchKindContent, + /** Match content of the message, excluding the headers.*/ + MCOIMAPSearchKindBody, + /** Match uids */ + MCOIMAPSearchKindUids, + /** Match headers of the message.*/ + MCOIMAPSearchKindHeader, + /** Match messages that are read.*/ + MCOIMAPSearchKindRead, + /** Match messages that are not read.*/ + MCOIMAPSearchKindUnread, + /** Match messages that are flagged.*/ + MCOIMAPSearchKindFlagged, + /** Match messages that are not flagged.*/ + MCOIMAPSearchKindUnflagged, + /** Match messages that are answered.*/ + MCOIMAPSearchKindAnswered, + /** Match messages that are not answered.*/ + MCOIMAPSearchKindUnanswered, + /** Match messages that are a drafts.*/ + MCOIMAPSearchKindDraft, + /** Match messages that are not drafts.*/ + MCOIMAPSearchKindUndraft, + /** Match messages that are deleted.*/ + MCOIMAPSearchKindDeleted, + /** Match messages that are spam.*/ + MCOIMAPSearchKindSpam, + /** Match messages before the given date.*/ + MCOIMAPSearchKindBeforeDate, + /** Match messages on the given date.*/ + MCOIMAPSearchKindOnDate, + /** Match messages after the given date.*/ + MCOIMAPSearchKindSinceDate, + /** Match messages before the given received date.*/ + MCOIMAPSearchKindBeforeReceivedDate, + /** Match messages on the given received date.*/ + MCOIMAPSearchKindOnReceivedDate, + /** Match messages after the given received date.*/ + MCOIMAPSearchKindSinceReceivedDate, + /** Match messages that are larger than the given size in bytes.*/ + MCOIMAPSearchKindSizeLarger, + /** Match messages that are smaller than the given size in bytes.*/ + MCOIMAPSearchKindSizeSmaller, + /** Match X-GM-THRID.*/ + MCOIMAPSearchGmailThreadID, + /** Match X-GM-MSGID.*/ + MCOIMAPSearchGmailMessageID, + /** Match X-GM-RAW.*/ + MCOIMAPSearchGmailRaw, + /** Or expresssion.*/ + MCOIMAPSearchKindOr, + /** And expression.*/ + MCOIMAPSearchKindAnd, + /** Not expression.*/ + MCOIMAPSearchKindNot, +}; + +/** Keys for the namespace dictionary.*/ +#define MCOIMAPNamespacePersonal @"IMAPNamespacePersonal" +#define MCOIMAPNamespaceOther @"IMAPNamespaceOther" +#define MCOIMAPNamespaceShared @"IMAPNamespaceShared" + +/** This is the constants for the IMAP capabilities.*/ +/** See corresponding RFC for more information.*/ +typedef NS_ENUM(NSInteger, MCOIMAPCapability) { + /** ACL Capability.*/ + MCOIMAPCapabilityACL, + /** BINARY Capability.*/ + MCOIMAPCapabilityBinary, + /** CATENATE Capability.*/ + MCOIMAPCapabilityCatenate, + /** CHILDREN Capability.*/ + MCOIMAPCapabilityChildren, + /** COMPRESS Capability.*/ + MCOIMAPCapabilityCompressDeflate, + /** CONDSTORE Capability.*/ + MCOIMAPCapabilityCondstore, + /** ENABLE Capability.*/ + MCOIMAPCapabilityEnable, + /** IDLE Capability.*/ + MCOIMAPCapabilityIdle, + /** ID Capability.*/ + MCOIMAPCapabilityId, + /** LITERAL+ Capability.*/ + MCOIMAPCapabilityLiteralPlus, + /** MULTIAPPEND Capability.*/ + MCOIMAPCapabilityMultiAppend, + /** NAMESPACE Capability.*/ + MCOIMAPCapabilityNamespace, + /** QRESYNC Capability.*/ + MCOIMAPCapabilityQResync, + /** QUOTE Capability.*/ + MCOIMAPCapabilityQuota, + /** SORT Capability.*/ + MCOIMAPCapabilitySort, + /** STARTTLS Capability.*/ + MCOIMAPCapabilityStartTLS, + /** THREAD=ORDEREDSUBJECT Capability.*/ + MCOIMAPCapabilityThreadOrderedSubject, + /** THREAD=REFERENCES Capability.*/ + MCOIMAPCapabilityThreadReferences, + /** UIDPLUS Capability.*/ + MCOIMAPCapabilityUIDPlus, + /** UNSELECT Capability.*/ + MCOIMAPCapabilityUnselect, + /** XLIST Capability.*/ + MCOIMAPCapabilityXList, + /** AUTH=ANONYMOUS Capability.*/ + MCOIMAPCapabilityAuthAnonymous, + /** AUTH=CRAM-MD5 Capability.*/ + MCOIMAPCapabilityAuthCRAMMD5, + /** AUTH=DIGEST-MD5 Capability.*/ + MCOIMAPCapabilityAuthDigestMD5, + /** AUTH=EXTERNAL Capability.*/ + MCOIMAPCapabilityAuthExternal, + /** AUTH=GSSAPI Capability.*/ + MCOIMAPCapabilityAuthGSSAPI, + /** AUTH=KERBEROSV4 Capability.*/ + MCOIMAPCapabilityAuthKerberosV4, + /** AUTH=LOGIN Capability.*/ + MCOIMAPCapabilityAuthLogin, + /** AUTH=NTML Capability.*/ + MCOIMAPCapabilityAuthNTLM, + /** AUTH=OTP Capability.*/ + MCOIMAPCapabilityAuthOTP, + /** AUTH=PLAIN Capability.*/ + MCOIMAPCapabilityAuthPlain, + /** AUTH=SKEY Capability.*/ + MCOIMAPCapabilityAuthSKey, + /** AUTH=SRP Capability.*/ + MCOIMAPCapabilityAuthSRP, + /** AUTH=XOAUTH2 Capability.*/ + MCOIMAPCapabilityXOAuth2, + /** X-GM-EXT-1 Capability.*/ + MCOIMAPCapabilityGmail +}; + +/** Error domain for mailcore.*/ +#define MCOErrorDomain @"MCOErrorDomain" + +/** Here's the list of errors.*/ +typedef NS_ENUM(NSInteger, MCOErrorCode) { + /** No error occurred.*/ + MCOErrorNone, + /** An error related to the connection occurred.*/ + /** It could not connect or it's been disconnected.*/ + MCOErrorConnection, + /** TLS/SSL connection was not available.*/ + MCOErrorTLSNotAvailable, + /** The protocol could not be parsed.*/ + MCOErrorParse, + /** Certificate was not valid.*/ + MCOErrorCertificate, + /** An authentication error occurred.*/ + MCOErrorAuthentication, + /** Specific to Gmail: IMAP not enabled.*/ + MCOErrorGmailIMAPNotEnabled, + /** Specific to Gmail: Exceeded bandwidth limit.*/ + MCOErrorGmailExceededBandwidthLimit, + /** Specific to Gmail: Too many simultaneous connections.*/ + MCOErrorGmailTooManySimultaneousConnections, + /** Specific to Mobile Me: Moved to iCloud.*/ + MCOErrorMobileMeMoved, + /** Specific to Yahoo: not available.*/ + MCOErrorYahooUnavailable, + /** Non existant folder, select failed.*/ + MCOErrorNonExistantFolder, + /** IMAP: Error occurred while renaming a folder.*/ + MCOErrorRename, + /** IMAP: Error occurred while deleting a folder.*/ + MCOErrorDelete, + /** IMAP: Error occurred while creating a folder.*/ + MCOErrorCreate, + /** IMAP: Error occurred while subscribing/unsubcribing to a folder.*/ + MCOErrorSubscribe, + /** IMAP: Error occurred while adding a message to a folder.*/ + MCOErrorAppend, + /** IMAP: Error occurred while copying a message.*/ + MCOErrorCopy, + /** IMAP: Error occurred while expunging.*/ + MCOErrorExpunge, + /** IMAP: Error occurred while fetching messages.*/ + MCOErrorFetch, + /** IMAP: Error occurred while IDLing.*/ + MCOErrorIdle, + /** IMAP: Error occurred while sending/getting identity.*/ + MCOErrorIdentity, + /** IMAP: Error occurred while getting namespace.*/ + MCOErrorNamespace, + /** IMAP: Error occurred while storing flags.*/ + MCOErrorStore, + /** IMAP: Error wile getting capabilities.*/ + MCOErrorCapability, + /** STARTTLS is not available.*/ + MCOErrorStartTLSNotAvailable, + /** SMTP: Illegal attachment: certain kind of attachment cannot be sent.*/ + MCOErrorSendMessageIllegalAttachment, + /** SMTP: Storage limit: message is probably too big.*/ + MCOErrorStorageLimit, + /** SMTP: Sending message is not allowed.*/ + MCOErrorSendMessageNotAllowed, + /** SMTP: Specific to hotmail. Needs to connect to webmail.*/ + MCOErrorNeedsConnectToWebmail, + /** SMTP: Error while sending message.*/ + MCOErrorSendMessage, + /** SMTP: Authentication required.*/ + MCOErrorAuthenticationRequired, + /** POP: Error occurred while fetching message list.*/ + MCOErrorFetchMessageList, + /** POP: Error occurred while deleting message.*/ + MCOErrorDeleteMessage, + /** SMTP: Error while checking account.*/ + MCOErrorInvalidAccount, + /** IMAP: Error when trying to enable compression.*/ + MCOErrorCompression, + /** SMTP: Error when no sender has been specified.*/ + MCOErrorNoSender, + /** SMTP: Error when no recipient has been specified.*/ + MCOErrorNoRecipient, + /** IMAP: Error when a noop operation fails.*/ + MCOErrorNoop, + /** The count of all errors */ + MCOErrorCodeCount, +}; + +/** Here's the list of connection log types.*/ +typedef NS_ENUM(NSInteger, MCOConnectionLogType) { + /** Received data.*/ + MCOConnectionLogTypeReceived, + /** Sent data.*/ + MCOConnectionLogTypeSent, + /** Sent private data. It can be a password.*/ + MCOConnectionLogTypeSentPrivate, + /** Parse error.*/ + MCOConnectionLogTypeErrorParse, + /** Error while receiving data. The data passed to the log will be nil.*/ + MCOConnectionLogTypeErrorReceived, + /** Error while sending dataThe data passed to the log will be nil.*/ + MCOConnectionLogTypeErrorSent, +}; + +/** + It's a network traffic logger. + @param connectionID is the identifier of the underlaying network socket. + @param type is the type of the log. + @param data is the data related to the log. + */ +typedef void (^MCOConnectionLogger)(void * connectionID, MCOConnectionLogType type, NSData * data); + +/** + It's called when asynchronous operations stop/start running. + */ +typedef void (^MCOOperationQueueRunningChangeBlock)(void); + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOHTMLRendererDelegate.h b/MailCore.framework/Versions/A/Headers/MCOHTMLRendererDelegate.h new file mode 100644 index 0000000..95f55b5 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOHTMLRendererDelegate.h @@ -0,0 +1,107 @@ +// +// MCOHTMLRendererDelegate.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/23/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOHTMLRENDERERDELEGATE_H + +#define MAILCORE_MCOHTMLRENDERERDELEGATE_H + +#import + +/** This delegate protocol is used to help rendering of the message. + + It will be used for the following methods. + + [MCOMessageParser htmlRenderingWithDelegate:], + + [MCOMessageBuilder htmlRenderingWithDelegate:] + + -[MCOIMAPMessage htmlRenderingWithFolder:delegate:] +*/ + +@class MCOAbstractPart; +@class MCOAbstractMessage; +@class MCOMessageHeader; +@class MCOAbstractMessagePart; + +@protocol MCOHTMLRendererDelegate + +/** All methods are optional.*/ +@optional + +/** This delegate method should return YES if it can render a preview of the attachment as an image. + part is always a single part. + +If the attachment can be previewed, it will be rendered using the image template. +If not, the attachment template will be used.*/ +- (BOOL) MCOAbstractMessage:(MCOAbstractMessage *)msg canPreviewPart:(MCOAbstractPart *)part; + +/** This delegate method should return YES if the part should be rendered.*/ +- (BOOL) MCOAbstractMessage:(MCOAbstractMessage *)msg shouldShowPart:(MCOAbstractPart *)part; + +/** This delegate method returns the values to be applied to the template for the given header. + See the content of MCHTMLRendererCallback.cpp for the default values of the header.*/ +- (NSDictionary *) MCOAbstractMessage:(MCOAbstractMessage *)msg templateValuesForHeader:(MCOMessageHeader *)header; + +/** This delegate method returns the values to be applied to the template for the given attachment. + See the content of MCHTMLRendererCallback.cpp for the default values of the attachment.*/ +- (NSDictionary *) MCOAbstractMessage:(MCOAbstractMessage *)msg templateValuesForPart:(MCOAbstractPart *)part; + +/** @name Template Methods + The following methods returns templates. They will match the syntax of ctemplate. + See https://code.google.com/p/ctemplate/ */ + +/** This delegate method returns the template for the main header of the message. + See the content of MCHTMLRendererCallback.cpp for the default values of the template.*/ +- (NSString *) MCOAbstractMessage:(MCOAbstractMessage *)msg templateForMainHeader:(MCOMessageHeader *)header; + +/** This delegate method returns the template an image attachment.*/ +- (NSString *) MCOAbstractMessage:(MCOAbstractMessage *)msg templateForImage:(MCOAbstractPart *)header; + +/** This delegate method returns the template attachment other than images. + See the content of MCHTMLRendererCallback.cpp for the default values of the template.*/ +- (NSString *) MCOAbstractMessage:(MCOAbstractMessage *)msg templateForAttachment:(MCOAbstractPart *)part; + +/** This delegate method returns the template of the main message. + It should include HEADER and a BODY values. + See the content of MCHTMLRendererCallback.cpp for the default values of the template.*/ +- (NSString *) MCOAbstractMessage_templateForMessage:(MCOAbstractMessage *)msg; + +/** This delegate method returns the template of an embedded message (included as attachment). + It should include HEADER and a BODY values. + See the content of MCHTMLRendererCallback.cpp for the default values of the template.*/ +- (NSString *) MCOAbstractMessage:(MCOAbstractMessage *)msg templateForEmbeddedMessage:(MCOAbstractMessagePart *)part; + +/** This delegate method returns the template for the header of an embedded message. + See the content of MCHTMLRendererCallback.cpp for the default values of the template.*/ +- (NSString *) MCOAbstractMessage:(MCOAbstractMessage *)msg templateForEmbeddedMessageHeader:(MCOMessageHeader *)header; + +/** This delegate method returns the separator between the text of the message and the attachments. + This delegate method returns the template for the header of an embedded message.*/ +- (NSString *) MCOAbstractMessage_templateForAttachmentSeparator:(MCOAbstractMessage *)msg; + +/** This delegate method cleans HTML content. + For example, it could fix broken tags, add missing , tags. + Default implementation uses HTMLCleaner::cleanHTML to clean HTML content. */ +- (NSString *) MCOAbstractMessage:(MCOAbstractMessage *)msg cleanHTMLForPart:(NSString *)html; + +/** @name Filters + + The following methods will filter the HTML content and may apply some filters to + change how to display the message.*/ + +/** This delegate method will apply the filter to HTML rendered content of a given text part. + For example, it could filter the CSS content.*/ +- (NSString *) MCOAbstractMessage:(MCOAbstractMessage *)msg filterHTMLForPart:(NSString *)html; + +/** This delegate method will apply a filter to the whole HTML content. + For example, it could collapse the quoted messages.*/ +- (NSString *) MCOAbstractMessage:(MCOAbstractMessage *)msg filterHTMLForMessage:(NSString *)html; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOHTMLRendererIMAPDelegate.h b/MailCore.framework/Versions/A/Headers/MCOHTMLRendererIMAPDelegate.h new file mode 100644 index 0000000..a127ec2 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOHTMLRendererIMAPDelegate.h @@ -0,0 +1,52 @@ +// +// MCOHTMLRendererIMAPDelegate.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/23/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOHTMLRENDERERIMAPDELEGATE_H + +#define MAILCORE_MCOHTMLRENDERERIMAPDELEGATE_H + +#import + +/** + This delegate protocol is used to fetch the content of the part of the message when the HTML render needs them. + It will help fetch the minimal amount of information from the message required to render the HTML. + + It will be used for the following method. + + [MCOIMAPMessage htmlRenderingWithFolder:delegate:] +*/ + +@class MCOIMAPPart; + +@protocol MCOHTMLRendererIMAPDelegate + +/** All methods are optional.*/ +@optional + +/** + The delegate method returns NULL if the delegate have not fetch the part yet. The opportunity can also be used to + start fetching the attachment. + It will return the data synchronously if it has already fetched it. +*/ +- (NSData *) MCOAbstractMessage:(MCOAbstractMessage *)msg dataForIMAPPart:(MCOIMAPPart *)part folder:(NSString *)folder; + +/** + The delegate method will notify the delegate to start fetching the given part. + It will be used to render an attachment that cannot be previewed. +*/ +- (void) MCOAbstractMessage:(MCOAbstractMessage *)msg prefetchAttachmentIMAPPart:(MCOIMAPPart *)part folder:(NSString *)folder; + +/** + The delegate method will notify the delegate to start fetching the given part. + It will be used to render an attachment that can be previewed. +*/ +- (void) MCOAbstractMessage:(MCOAbstractMessage *)msg prefetchImageIMAPPart:(MCOIMAPPart *)part folder:(NSString *)folder; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAP.h b/MailCore.framework/Versions/A/Headers/MCOIMAP.h new file mode 100755 index 0000000..7acffce --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAP.h @@ -0,0 +1,44 @@ +// +// MCOIMAP.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/22/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAP_H + +#define MAILCORE_MCOIMAP_H + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPAppendMessageOperation.h b/MailCore.framework/Versions/A/Headers/MCOIMAPAppendMessageOperation.h new file mode 100644 index 0000000..1e5fbd3 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPAppendMessageOperation.h @@ -0,0 +1,42 @@ +// +// MCOIMAPAppendMessageOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/25/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPAPPENDMESSAGEOPERATION_H + +#define MAILCORE_MCOIMAPAPPENDMESSAGEOPERATION_H + +/** This class implements an operation that adds a message to a folder. */ + +#import +#import + +@interface MCOIMAPAppendMessageOperation : MCOIMAPBaseOperation + +@property (nonatomic, assign) time_t date; + +/** + This block will be called as bytes are sent +*/ +@property (nonatomic, copy) MCOIMAPBaseOperationProgressBlock progress; + +/** + Starts the asynchronous append operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `createdUID` will be the value of the + UID of the created message if the server supports UIDPLUS or zero if not. + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in MCOConstants.h, `createdUID` will be zero. +*/ +- (void) start:(void (^)(NSError * error, uint32_t createdUID))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPBaseOperation.h b/MailCore.framework/Versions/A/Headers/MCOIMAPBaseOperation.h new file mode 100644 index 0000000..82a3437 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPBaseOperation.h @@ -0,0 +1,42 @@ +// +// MCOIMAPBaseOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/26/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPBASEOPERATION_H + +#define MAILCORE_MCOIMAPBASEOPERATION_H + +/** Represents a generic IMAP operation with methods that are called with progress updates */ + +#import + +typedef void (^MCOIMAPBaseOperationProgressBlock)(unsigned int current, unsigned int maximum); +typedef void (^MCOIMAPBaseOperationItemProgressBlock)(unsigned int current); + +@interface MCOIMAPBaseOperation : MCOOperation + +@property (nonatomic, assign, getter=isUrgent) BOOL urgent; + +/* Can be overriden by subclasses */ + +/* + Will be called when a sending or receiving the contents of a message + @param current The number of bytes sent or received + @param maximum The total number of bytes expected +*/ +- (void)bodyProgress:(unsigned int)current maximum:(unsigned int)maximum; + +/* + Will be called when a new item is received in a list of items, like for example a message list + @param current The number of items downloaded + @param maximum The total number of items expected +*/ +- (void)itemProgress:(unsigned int)current maximum:(unsigned int)maximum; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPCapabilityOperation.h b/MailCore.framework/Versions/A/Headers/MCOIMAPCapabilityOperation.h new file mode 100644 index 0000000..96314e2 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPCapabilityOperation.h @@ -0,0 +1,40 @@ +// +// MCOIMAPCapabilityOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/25/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPCAPABILITYOPERATION_H + +#define MAILCORE_MCOIMAPCAPABILITYOPERATION_H + +/** + This class implements an operation to query for IMAP capabilities, + like for example the extensions UIDPLUS, IDLE, NAMESPACE, ... etc +*/ + +#import + +@class MCOIndexSet; + +@interface MCOIMAPCapabilityOperation : MCOIMAPBaseOperation + + +/** + Starts the asynchronous capabilities operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `capabilities` will contain a set of IMAP capabilities. + See `MCOConstants.h` under `MCOIMAPCapability` for a list of possible values. + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in MCOConstants.h, `capabilities` will be nil +*/ +- (void) start:(void (^)(NSError * error, MCOIndexSet * capabilities))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPCopyMessagesOperation.h b/MailCore.framework/Versions/A/Headers/MCOIMAPCopyMessagesOperation.h new file mode 100644 index 0000000..4c573a5 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPCopyMessagesOperation.h @@ -0,0 +1,37 @@ +// +// MCOIMAPCopyMessagesOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/25/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#import + +#ifndef MAILCORE_MCOCOPYMESSAGESOPERATION_H + +#define MAILCORE_MCOCOPYMESSAGESOPERATION_H + +/** Implements an operation for copying messages between folders */ + +@class MCOIndexSet; + +@interface MCOIMAPCopyMessagesOperation : MCOIMAPBaseOperation + +/** + Starts the asynchronous copy operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `destUids` will contain the UIDs of the messages created + in the destination folder. If the server doesn't support UIDPLUS then `destUids` will be nil. + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in `MCOConstants.h`, `destUids` will be nil +*/ + +- (void) start:(void (^)(NSError * error, NSDictionary * uidMapping))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPFetchContentOperation.h b/MailCore.framework/Versions/A/Headers/MCOIMAPFetchContentOperation.h new file mode 100644 index 0000000..254cd14 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPFetchContentOperation.h @@ -0,0 +1,43 @@ +// +// MCOIMAPFetchContentOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/25/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPFETCHCONTENTOPERATION_H + +#define MAILCORE_MCOIMAPFETCHCONTENTOPERATION_H + +/** + This class implements an operation to fetch the content of a message. + It can be a part or a full message. +*/ + +#import +#import + +@interface MCOIMAPFetchContentOperation : MCOIMAPBaseOperation + +/** + This block will be called as bytes are received from the network +*/ +@property (nonatomic, copy) MCOIMAPBaseOperationProgressBlock progress; + +/** + Starts the asynchronous fetch operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `data` will contain the requested data + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in `MCOConstants.h`, `data` will be nil +*/ + +- (void) start:(void (^)(NSError * error, NSData * data))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPFetchFoldersOperation.h b/MailCore.framework/Versions/A/Headers/MCOIMAPFetchFoldersOperation.h new file mode 100644 index 0000000..853c55f --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPFetchFoldersOperation.h @@ -0,0 +1,33 @@ +// +// MCOIMAPFetchFoldersOperation.h +// mailcore2 +// +// Created by Matt Ronge on 1/31/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPFETCHFOLDERSOPERATION_H + +#define MAILCORE_MCOIMAPFETCHFOLDERSOPERATION_H + +/** This class implements an operation to fetch a list of folders. */ + +#import + +@interface MCOIMAPFetchFoldersOperation : MCOIMAPBaseOperation + +/** + Starts the asynchronous fetch operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `folders` will contain an array of MCOIMAPFolder + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in `MCOConstants.h`, `folders` will be nil +*/ +- (void) start:(void (^)(NSError * error, NSArray * /* MCOIMAPFolder */ folders))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPFetchMessagesOperation.h b/MailCore.framework/Versions/A/Headers/MCOIMAPFetchMessagesOperation.h new file mode 100644 index 0000000..13dad1b --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPFetchMessagesOperation.h @@ -0,0 +1,45 @@ +// +// MCOIMAPFetchMessagesOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/25/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPFETCHMESSAGESOPERATION_H + +#define MAILCORE_MCOIMAPFETCHMESSAGESOPERATION_H + +#import +#import + +/** This class implements an operation to fetch a list of messages from a folder */ + +@class MCOIndexSet; + +@interface MCOIMAPFetchMessagesOperation : MCOIMAPBaseOperation + +/** This block will be called each time a new message is downloaded. */ +@property (nonatomic, copy) MCOIMAPBaseOperationItemProgressBlock progress; + +/** Extra headers to request. Must set requestKind | IMAPMessagesRequestKindExtraHeaders */ +@property (nonatomic, copy) NSArray * extraHeaders; + +/** + Starts the asynchronous fetch operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `messages` will be an array of MCOIMAPMessage. + `vanishedMessages` will contain the messages removed on the server if the server supports QRESYNC and if it was a sync request + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in `MCOConstants.h`, `messages` and `vanishedMessages` will be nil + + If you are not supporting QRESYNC you can safely ignore `vanishedMessages`. +*/ +- (void) start:(void (^)(NSError * error, NSArray * /* MCOIMAPMessage */ messages, MCOIndexSet * vanishedMessages))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPFetchNamespaceOperation.h b/MailCore.framework/Versions/A/Headers/MCOIMAPFetchNamespaceOperation.h new file mode 100644 index 0000000..5d58f05 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPFetchNamespaceOperation.h @@ -0,0 +1,39 @@ +// +// MCOIMAPFetchNamespaceOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/25/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPFETCHNAMESPACEOPERATION_H + +#define MAILCORE_MCOIMAPFETCHNAMESPACEOPERATION_H + +/** This class implements an operation to fetch any IMAP namespaces. */ + +#import + +@interface MCOIMAPFetchNamespaceOperation : MCOIMAPBaseOperation + +/** + Starts the asynchronous namespace fetch operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `namespaces` will contain these keys: + + - `MCOIMAPNamespacePersonal` for personal namespaces, + - `MCOIMAPNamespaceOther` for other namespaces, + - `MCOIMAPNamespaceShared` for shared namespaces. + + Values of the dictionary are MCOIMAPNamespace + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in `MCOConstants.h`, `namespaces` will be nil +*/ +- (void) start:(void (^)(NSError * error, NSDictionary * namespaces))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPFolder.h b/MailCore.framework/Versions/A/Headers/MCOIMAPFolder.h new file mode 100644 index 0000000..048dfb5 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPFolder.h @@ -0,0 +1,34 @@ +// +// MCOIMAPFolder.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/23/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPFOLDER_H + +#define MAILCORE_MCOIMAPFOLDER_H + +/** This class represents an IMAP folder */ + +#import +#import + +@interface MCOIMAPFolder : NSObject + +/** The folder's path, like for example INBOX.Archive */ +@property (nonatomic, copy) NSString * path; + +/** It's the delimiter for each component of the path. Commonly . or / */ +@property (nonatomic, assign) char delimiter; + +/** + Any flags the folder may have, like if the folder is for Drafts, Spam, Junk, etc. Or + it could be marked with metadata like that it has no children. +*/ +@property (nonatomic, assign) MCOIMAPFolderFlag flags; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPFolderInfo.h b/MailCore.framework/Versions/A/Headers/MCOIMAPFolderInfo.h new file mode 100644 index 0000000..53ad35b --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPFolderInfo.h @@ -0,0 +1,42 @@ +// +// MCOIMAPFolderInfo.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/25/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPFOLDERINFO_H + +#define MAILCORE_MCOIMAPFOLDERINFO_H + +#import + +/* This class holds IMAP folder metadata */ + +@interface MCOIMAPFolderInfo : NSObject + +/** Create an empty instance */ ++ (MCOIMAPFolderInfo *) info; + +/** The folder's IMAP UIDNEXT value. Used to determine the uid for the next received message. */ +@property (nonatomic, assign) uint32_t uidNext; + +/** The folders IMAP UIDVALIDITY value. Must be used to determine if the server has changed assigned UIDs */ +@property (nonatomic, assign) uint32_t uidValidity; + +/** An advanced value used for doing quick flag syncs if the server supports it. The MODSEQ value. */ +@property (nonatomic, assign) uint64_t modSequenceValue; + +/** Total number of messages in the folder */ +@property (nonatomic, assign) int messageCount; + +// first uid of the unseen messages. +@property (nonatomic, assign) uint32_t firstUnseenUid; + +/** An boolean indicates that this folder or IMAP server allows to add a new permanent flags */ +@property (nonatomic, assign) BOOL allowsNewPermanentFlags; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPFolderInfoOperation.h b/MailCore.framework/Versions/A/Headers/MCOIMAPFolderInfoOperation.h new file mode 100644 index 0000000..e25016c --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPFolderInfoOperation.h @@ -0,0 +1,39 @@ +// +// MCOIMAPFolderInfoOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/25/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPFOLDERINFOOPERATION_H + +#define MAILCORE_MCOIMAPFOLDERINFOOPERATION_H + +#import + +/** + The class is used to get folder metadata (like UIDVALIDITY, UIDNEXT, etc). + @see MCOIMAPFolderInfo +*/ + +@class MCOIMAPFolderInfo; + +@interface MCOIMAPFolderInfoOperation : MCOIMAPBaseOperation + +/** + Starts the asynchronous operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `info` will contain the folder metadata + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in `MCOConstants.h`, `info` will be nil +*/ + +- (void) start:(void (^)(NSError * error, MCOIMAPFolderInfo * info))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPFolderStatus.h b/MailCore.framework/Versions/A/Headers/MCOIMAPFolderStatus.h new file mode 100644 index 0000000..fedd31a --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPFolderStatus.h @@ -0,0 +1,39 @@ +// +// MCOIMAPFolderStatus.h +// mailcore2 +// +// Created by Sebastian on 6/5/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPFOLDERSTATUS_H + +#define MAILCORE_MCOIMAPFOLDERSTATUS_H + +#import + +/* This class holds IMAP folder metadata */ + +@interface MCOIMAPFolderStatus : NSObject + +/** The folder's IMAP UIDNEXT value. Used to determine the uid for the next received message. */ +@property (nonatomic, assign) uint32_t uidNext; + +/** The folders IMAP UIDVALIDITY value. Must be used to determine if the server has changed assigned UIDs */ +@property (nonatomic, assign) uint32_t uidValidity; + +/** Number of recent messages received in the folder */ +@property (nonatomic, assign) uint32_t recentCount; + +/** Number of unseen messages in the folder */ +@property (nonatomic, assign) uint32_t unseenCount; + +/** Number of messages in the folder */ +@property (nonatomic, assign) uint32_t messageCount; + +/** Highest modification sequence value for this folder. See CONDSTORE RFC 4551. */ +@property (nonatomic, assign) uint64_t setHighestModSeqValue; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPFolderStatusOperation.h b/MailCore.framework/Versions/A/Headers/MCOIMAPFolderStatusOperation.h new file mode 100644 index 0000000..2117260 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPFolderStatusOperation.h @@ -0,0 +1,39 @@ +// +// MCOIMAPFolderStatusOperation.h +// mailcore2 +// +// Created by Sebastian on 6/5/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPFOLDERSTATUSOPERATION_H + +#define MAILCORE_MCOIMAPFOLDERSTATUSOPERATION_H + +#import + +/** + The class is used to get folder metadata (like UIDVALIDITY, UIDNEXT, etc). + @see MCOIMAPFolderStatus + */ + +@class MCOIMAPFolderStatus; + +@interface MCOIMAPFolderStatusOperation : MCOIMAPBaseOperation + +/** + Starts the asynchronous operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `status` will contain the status metadata + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in `MCOConstants.h`, `info` will be nil + */ + +- (void) start:(void (^)(NSError * error, MCOIMAPFolderStatus * status))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPIdentity.h b/MailCore.framework/Versions/A/Headers/MCOIMAPIdentity.h new file mode 100644 index 0000000..1690c0e --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPIdentity.h @@ -0,0 +1,42 @@ +// +// MCOIMAPIdentity.h +// mailcore2 +// +// Created by Hoa V. DINH on 8/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPIDENTITY_H + +#define MAILCORE_MCOIMAPIDENTITY_H + +#import + +@interface MCOIMAPIdentity : NSObject + +/** Returns a simple identity */ ++ (MCOIMAPIdentity *) identityWithVendor:(NSString *)vendor + name:(NSString *)name + version:(NSString *)version; + +/** Vendor of the IMAP client */ +@property (nonatomic, copy) NSString * vendor; + +/** Name of the IMAP client */ +@property (nonatomic, copy) NSString * name; + +/** Version of the IMAP client */ +@property (nonatomic, copy) NSString * version; + +/** All fields names of the identity of the client */ +- (NSArray *) allInfoKeys; + +/** Set a custom field in the identity */ +- (NSString *) infoForKey:(NSString *)key; + +/** Retrieve a custom field in the identity */ +- (void) setInfo:(NSString *)value forKey:(NSString *)key; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPIdentityOperation.h b/MailCore.framework/Versions/A/Headers/MCOIMAPIdentityOperation.h new file mode 100644 index 0000000..20b9fc8 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPIdentityOperation.h @@ -0,0 +1,39 @@ +// +// MCOIMAPIdentityOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/25/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPIDENTITYOPERATION_H + +#define MAILCORE_MCOIMAPIDENTITYOPERATION_H + +/** + This class implements an operation to get the servers identification info or + to send the clients identification info. Useful for bug reports and usage + statistics. + @warn Not all servers support this. +*/ + +#import + +@interface MCOIMAPIdentityOperation : MCOIMAPBaseOperation + +/** + Starts the asynchronous identity operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `serverIdentity` will contain identifying server information. + See [RFC2971](http://tools.ietf.org/html/rfc2971) for commons dictionary keys. + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in `MCOConstants.h`, `serverIdentity` will be nil +*/ +- (void) start:(void (^)(NSError * error, NSDictionary * serverIdentity))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPIdleOperation.h b/MailCore.framework/Versions/A/Headers/MCOIMAPIdleOperation.h new file mode 100644 index 0000000..672a325 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPIdleOperation.h @@ -0,0 +1,40 @@ +// +// MCOIMAPIdleOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/25/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPIDLEOPERATION_H + +#define MAILCORE_MCOIMAPIDLEOPERATION_H + +/** + This class implements an IMAP IDLE. IDLE is used to keep a connection + open with the server so that new messages can be pushed to the client. + See [RFC2177](http://tools.ietf.org/html/rfc2177) +*/ + +#import + +@interface MCOIMAPIdleOperation : MCOIMAPBaseOperation + +/** Stop the current IDLE session */ +- (void) interruptIdle; + +/** + Starts IDLE + + @param completionBlock Called when the IDLE times out, errors out or detects a change + + - 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/MailCore.framework/Versions/A/Headers/MCOIMAPMessage.h b/MailCore.framework/Versions/A/Headers/MCOIMAPMessage.h new file mode 100644 index 0000000..7ca40b9 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPMessage.h @@ -0,0 +1,81 @@ +// +// MCOIMAPMessage.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/23/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPMESSAGE_H + +#define MAILCORE_MCOIMAPMESSAGE_H + +/** + This represents an IMAP message. + + If you fetched the MIME structure of the message, you can fetch + efficiently the content of the message by fetching only the parts + that you need to show it. + + For example, you could fetch only the text parts to show the summary + of the message, using [MCOIMAPSession fetchMessageAttachmentByUIDOperationWithFolder:uid:partID:encoding:] + + You can also decide to fetch entirely the message using + [MCOIMAPSession fetchMessageByUIDOperationWithFolder:uid:] +*/ + +#import +#import + +@protocol MCOHTMLRendererIMAPDelegate; + +@interface MCOIMAPMessage : MCOAbstractMessage + +/** IMAP UID of the message. */ +@property (nonatomic, assign) uint32_t uid; + +/* Size of the entire message */ +@property (nonatomic, assign) uint32_t size; + +/** Flags of the message, like if it is deleted, read, starred etc */ +@property (nonatomic, assign) MCOMessageFlag flags; + +/** The contents of the message flags when it was fetched from the server */ +@property (nonatomic, assign) MCOMessageFlag originalFlags; + +/** Flag keywords of the message, mostly custom flags */ +@property (nonatomic, copy) NSArray * /* NSString */ customFlags; + +/** It's the last modification sequence value of the message synced from the server. See RFC4551 */ +@property (nonatomic, assign) uint64_t modSeqValue; + +/** Main MIME part of the message */ +@property (nonatomic, retain) MCOAbstractPart * mainPart; + +/** All Gmail labels of the message */ +@property (nonatomic, copy) NSArray * /* NSString */ gmailLabels; + +/** Gmail message ID of the message */ +@property (nonatomic, assign) uint64_t gmailMessageID; + +/** Gmail thread ID of the message */ +@property (nonatomic, assign) uint64_t gmailThreadID; + +/** + Returns the part with the given part identifier. + @param partID A part identifier looks like 1.2.1 +*/ +- (MCOAbstractPart *) partForPartID:(NSString *)partID; + +/** + HTML rendering of the message to be displayed in a web view. + The delegate should implement at least + [MCOAbstractMessage:dataForIMAPPart:folder:] + so that the complete HTML rendering can take place. +*/ +- (NSString *) htmlRenderingWithFolder:(NSString *)folder + delegate:(id )delegate; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPMessagePart.h b/MailCore.framework/Versions/A/Headers/MCOIMAPMessagePart.h new file mode 100644 index 0000000..c455d33 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPMessagePart.h @@ -0,0 +1,24 @@ +// +// MCOIMAPMessagePart.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/23/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPMESSAGEPART_H + +#define MAILCORE_MCOIMAPMESSAGEPART_H + +/** Represents a message part. */ + +#import + +@interface MCOIMAPMessagePart : MCOAbstractMessagePart + +/** A part identifier is of the form 1.2.1*/ +@property (nonatomic, copy) NSString * partID; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPMessageRenderingOperation.h b/MailCore.framework/Versions/A/Headers/MCOIMAPMessageRenderingOperation.h new file mode 100644 index 0000000..2c7f56d --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPMessageRenderingOperation.h @@ -0,0 +1,35 @@ +// +// MCOIMAPMessageRenderingOperation.h +// mailcore2 +// +// Created by Paul Young on 07/07/2013. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPMESSAGERENDERINGOPERATION_H + +#define MAILCORE_MCOIMAPMESSAGERENDERINGOPERATION_H + +#import + +/** + The class is used to get the HTML string of a message. + */ + +@interface MCOIMAPMessageRenderingOperation : MCOIMAPBaseOperation + +/** + Starts the asynchronous operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `htmlString` will contain the message + + - On failure, `error` will be set and `htmlString` will be nil + */ + +- (void) start:(void (^)(NSString * htmlString, NSError * error))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPMultipart.h b/MailCore.framework/Versions/A/Headers/MCOIMAPMultipart.h new file mode 100644 index 0000000..c083f42 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPMultipart.h @@ -0,0 +1,24 @@ +// +// MCOIMAPMultipart.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/23/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPMULTIPART_H + +#define MAILCORE_MCOIMAPMULTIPART_H + +/** Represents the a multipart retrieved from IMAP */ + +#import + +@interface MCOIMAPMultipart : MCOAbstractMultipart + +/** A part identifier looks like 1.2.1 */ +@property (nonatomic, copy) NSString * partID; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPNamespace.h b/MailCore.framework/Versions/A/Headers/MCOIMAPNamespace.h new file mode 100644 index 0000000..3e842aa --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPNamespace.h @@ -0,0 +1,55 @@ +// +// MCOIMAPNamespace.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/23/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPNAMESPACE_H + +#define MAILCORE_MCOIMAPNAMESPACE_H + +/** Represents an IMAP namespace */ + +#import + +@class MCOIMAPNamespace; + +@interface MCOIMAPNamespace : NSObject + +/** + Returns a simple namespace with only one item. +*/ ++ (MCOIMAPNamespace *) namespaceWithPrefix:(NSString *)prefix delimiter:(char)delimiter; + +/** Returns the prefix of the main item of this namespace. */ +- (NSString *) mainPrefix; + +/** Returns the path delimiter of the main item of this namespace */ +- (char) mainDelimiter; + +/** Returns the list of prefixes of this namespace. */ +- (NSArray * /* NSString */) prefixes; + +/** + Returns the folder path for the given list of path components in the context + of the main item of the namespace. +*/ +- (NSString *) pathForComponents:(NSArray *)components; + +/** + Returns the folder path for the given list of path components and a prefix. + It will use the best item matching the prefix to compute the path. +*/ +- (NSString *) pathForComponents:(NSArray *)components prefix:(NSString *)prefix; + +/** Returns the components given a folder path. */ +- (NSArray * /* NSString */) componentsFromPath:(NSString *)path; + +/** Returns YES if the namespace contains the given folder path. */ +- (BOOL) containsFolderPath:(NSString *)path; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPNamespaceItem.h b/MailCore.framework/Versions/A/Headers/MCOIMAPNamespaceItem.h new file mode 100644 index 0000000..64ae3c5 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPNamespaceItem.h @@ -0,0 +1,36 @@ +// +// MCOIMAPNamespaceItem.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/23/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPNAMESPACEITEM_H + +#define MAILCORE_MCOIMAPNAMESPACEITEM_H + +/** Represents a namespace item */ + +#import + +@interface MCOIMAPNamespaceItem : NSObject + +/** This is the prefix for this namespace item */ +@property (nonatomic, copy) NSString * prefix; + +/** This is the delimiter of the path for this namespace item */ +@property (nonatomic, assign) char delimiter; + +/** Returns folder path for given path components in the context of this namespace item */ +- (NSString *) pathForComponents:(NSArray *)components; + +/** Returns components for the given path in the context of this namespace */ +- (NSArray * /* NSString */) componentsForPath:(NSString *)path; + +/** Returns YES if the namespace contains this folder path */ +- (BOOL) containsFolder:(NSString *)folder; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPOperation.h b/MailCore.framework/Versions/A/Headers/MCOIMAPOperation.h new file mode 100644 index 0000000..f8003c0 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPOperation.h @@ -0,0 +1,33 @@ +// +// MCOIMAPOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/23/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPOPERATION_H + +#define MAILCORE_MCOIMAPOPERATION_H + +/** This class implements a generic IMAP operation */ + +#import + +@interface MCOIMAPOperation : MCOIMAPBaseOperation + +/** + Starts the asynchronous append 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/MailCore.framework/Versions/A/Headers/MCOIMAPPart.h b/MailCore.framework/Versions/A/Headers/MCOIMAPPart.h new file mode 100644 index 0000000..660113b --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPPart.h @@ -0,0 +1,38 @@ +// +// MCOIMAPPart.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/23/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPABSTRACTPART_H + +#define MAILCORE_MCOIMAPABSTRACTPART_H + +#import + +#import + +/** Represents a single IMAP message part */ + +@interface MCOIMAPPart : MCOAbstractPart + +/** A part identifier looks like 1.2.1 */ +@property (nonatomic, copy) NSString * partID; + +/** The size of the single part in bytes */ +@property (nonatomic, nonatomic) unsigned int size; + +/** It's the encoding of the single part */ +@property (nonatomic, nonatomic) MCOEncoding encoding; + +/** + Returns the decoded size of the part. + For example, for a part that's encoded with base64, it will return actual_size * 3/4. +*/ +- (unsigned int) decodedSize; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPQuotaOperation.h b/MailCore.framework/Versions/A/Headers/MCOIMAPQuotaOperation.h new file mode 100644 index 0000000..c0463bb --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPQuotaOperation.h @@ -0,0 +1,15 @@ +// +// MCOIMAPQuotaOperation.h +// mailcore2 +// +// Created by Petro Korenev on 8/2/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#import "MCOIMAPBaseOperation.h" + +@interface MCOIMAPQuotaOperation : MCOIMAPBaseOperation + +- (void) start:(void (^)(NSError * error, NSUInteger usage, NSUInteger limit))completionBlock; + +@end diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPSearchExpression.h b/MailCore.framework/Versions/A/Headers/MCOIMAPSearchExpression.h new file mode 100644 index 0000000..51688dc --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPSearchExpression.h @@ -0,0 +1,356 @@ +// +// MCOIMAPSearchExpression.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/25/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPSEARCHEXPRESSION_H + +#define MAILCORE_MCOIMAPSEARCHEXPRESSION_H + +/** Used to construct an IMAP search query */ + +#import +#import +#import + +@interface MCOIMAPSearchExpression : NSObject + +/** + Creates a search expression that returns all UIDS for the mailbox + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchAll] +*/ ++ (MCOIMAPSearchExpression *) searchAll; + +/** + Creates a search expression that matches the sender of an email. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchFrom:@"laura@etpan.org"] +*/ ++ (MCOIMAPSearchExpression *) searchFrom:(NSString *)value; + +/** + Creates a search expression that matches any recipient of an email. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchRecipient:@"ngan@etpan.org"] + **/ ++ (MCOIMAPSearchExpression *) searchRecipient:(NSString *)value; + +/** + Creates a search expression that matches on the receiver (to) of an email. Useful to check whether the mail is directly addressed to the receiver. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchTo:@"ngan@etpan.org"] +**/ ++ (MCOIMAPSearchExpression *) searchTo:(NSString *)value; + +/** + Creates a search expression that matches on the cc of an email. Useful to check whether the mail is addressed to the receiver as cc. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchCc:@"ngan@etpan.org"] + **/ ++ (MCOIMAPSearchExpression *) searchCc:(NSString *)value; + +/** + Creates a search expression that matches on the bcc field of an email. Useful to check whether the mail is addressed to the receiver as bcc. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchBcc:@"ngan@etpan.org"] + **/ ++ (MCOIMAPSearchExpression *) searchBcc:(NSString *)value; + +/* + Creates a search expression that matches the subject of an email. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchSubject:@"airline"] +**/ ++ (MCOIMAPSearchExpression *) searchSubject:(NSString *)value; + +/** + Creates a search expression that matches the content of an email, including the headers. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchContent:@"meeting"] +*/ ++ (MCOIMAPSearchExpression *) searchContent:(NSString *)value; + +/** + Creates a search expression that matches the content of an email, excluding the headers. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchBody:@"building"] + */ ++ (MCOIMAPSearchExpression *) searchBody:(NSString *)value; + +/** + Creates a search expression that matches the uids specified. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchUids:uids] + **/ ++ (MCOIMAPSearchExpression *) searchUIDs:(MCOIndexSet *) uids; + +/** + Creates a search expression that matches the content of a specific header. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchHeader:@"List-Id" value:@"shoes"] +**/ ++ (MCOIMAPSearchExpression *) searchHeader:(NSString *)header value:(NSString *)value; + +/** + Creates a search expression that matches messages with the Read flag. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchRead] + **/ ++ (MCOIMAPSearchExpression *) searchRead; + +/** + Creates a search expression that matches messages without the Read flag. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchUnread] + **/ ++ (MCOIMAPSearchExpression *) searchUnread; + +/** + Creates a search expression that matches messages that have been flagged. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchFlagged] + **/ ++ (MCOIMAPSearchExpression *) searchFlagged; + +/** + Creates a search expression that matches messages that haven't been flagged. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchUnflagged] + **/ ++ (MCOIMAPSearchExpression *) searchUnflagged; + +/** + Creates a search expression that matches messages that have the answered flag set. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchAnswered] + **/ ++ (MCOIMAPSearchExpression *) searchAnswered; + +/** + Creates a search expression that matches messages that don't have the answered flag set.. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchUnanswered] + **/ ++ (MCOIMAPSearchExpression *) searchUnanswered; + +/** + Creates a search expression that matches draft messages. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchDraft] + **/ ++ (MCOIMAPSearchExpression *) searchDraft; + +/** + Creates a search expression that matches messages that aren't drafts. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchUndraft] + **/ ++ (MCOIMAPSearchExpression *) searchUndraft; + +/** + Creates a search expression that matches messages that are deleted. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchDeleted] + **/ ++ (MCOIMAPSearchExpression *) searchDeleted; + +/** + Creates a search expression that matches messages that are spam. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchSpam] + **/ ++ (MCOIMAPSearchExpression *) searchSpam; + +/** + Creates a search expression that matches messages sent before a date. + + Example: + + NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-(60.0 * 60.0 * 24.0)]; + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchBeforeDate:yesterday] + **/ ++ (MCOIMAPSearchExpression *) searchBeforeDate:(NSDate *)date; + +/** + Creates a search expression that matches messages sent on a date. + + Example: + + NSDate *now = [NSDate date]; + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchOnDate:now] + **/ ++ (MCOIMAPSearchExpression *) searchOnDate:(NSDate *)date; + +/** + Creates a search expression that matches messages sent since a date. + + Example: + + NSDate *now = [NSDate date]; + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchSinceDate:now] + **/ ++ (MCOIMAPSearchExpression *) searchSinceDate:(NSDate *)date; + +/** + Creates a search expression that matches messages received before a date. + + Example: + + NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-(60.0 * 60.0 * 24.0)]; + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchBeforeReceivedDate:yesterday] + **/ ++ (MCOIMAPSearchExpression *) searchBeforeReceivedDate:(NSDate *)date; + +/** + Creates a search expression that matches messages received on a date. + + Example: + + NSDate *now = [NSDate date]; + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchOnReceivedDate:now] + **/ ++ (MCOIMAPSearchExpression *) searchOnReceivedDate:(NSDate *)date; + +/** + Creates a search expression that matches messages received since a date. + + Example: + + NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-(60.0 * 60.0 * 24.0)]; + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchSinceReceivedDate:yesterday] + **/ ++ (MCOIMAPSearchExpression *) searchSinceReceivedDate:(NSDate *)date; + +/** + Creates a search expression that matches messages larger than a given size in bytes. + + Example: + + uint32_t minSize = 1024 * 10; // 10 KB + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchSizeLargerThan:minSize] + **/ ++ (MCOIMAPSearchExpression *) searchSizeLargerThan:(uint32_t)size; + +/** + Creates a search expression that matches messages smaller than a given size in bytes. + + Example: + + uint32_t maxSize = 1024 * 10; // 10 KB + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchSizeSmallerThan:maxSize] + **/ ++ (MCOIMAPSearchExpression *) searchSizeSmallerThan:(uint32_t)size; + +/** + Creates a search expression that matches emails with the given gmail thread id + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchGmailThreadID:aThreadID] + */ ++ (MCOIMAPSearchExpression *) searchGmailThreadID:(uint64_t)number; + + +/** + Creates a search expression that matches emails with the given gmail message id + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchGmailMessageID:aMessageID] + */ ++ (MCOIMAPSearchExpression *) searchGmailMessageID:(uint64_t)number; + +/** + Creates a search expression that gets emails that match a gmail raw search + expression. + + Example: + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchGmailRaw:@"from:bill has:attachment filename:cal meeting schedule"] + */ ++ (MCOIMAPSearchExpression *) searchGmailRaw:(NSString *)expr; + + +/** + Creates a search expression that's a disjunction of two search expressions. + + Example: + + MCOIMAPSearchExpression * exprFrom = [MCOIMAPSearchExpression searchFrom:@"laura@etpan.org"] + MCOIMAPSearchExpression * exprSubject = [MCOIMAPSearchExpression searchContent:@"meeting"] + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchAnd:exprFrom other:exprSubject]; +**/ + ++ (MCOIMAPSearchExpression *) searchAnd:(MCOIMAPSearchExpression *)expression other:(MCOIMAPSearchExpression *)other; +/** + Creates a search expression that's a conjunction of two search expressions. + + Example: + + MCOIMAPSearchExpression * exprFrom = [MCOIMAPSearchExpression searchFrom:@"laura@etpan.org"] + MCOIMAPSearchExpression * exprOtherFrom = [MCOIMAPSearchExpression searchRecipient:@"ngan@etpan.org"] + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchOr:exprFrom exprOtherFrom]; +*/ ++ (MCOIMAPSearchExpression *) searchOr:(MCOIMAPSearchExpression *)expression other:(MCOIMAPSearchExpression *)other; + +/** + Creates a search expression that matches when the argument is not matched. + + Example: + + MCOIMAPSearchExpression * exprSubject = [MCOIMAPSearchExpression searchSubject:@"airline"] + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchNot:exprSubject]; + The expression will match when the subject does not contain the word airline + + */ ++ (MCOIMAPSearchExpression *) searchNot:(MCOIMAPSearchExpression *)expression; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPSearchOperation.h b/MailCore.framework/Versions/A/Headers/MCOIMAPSearchOperation.h new file mode 100644 index 0000000..1ec3c95 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPSearchOperation.h @@ -0,0 +1,36 @@ +// +// MCOIMAPSearchOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/25/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOSEARCHOPERATION_H + +#define MAILCORE_MCOSEARCHOPERATION_H + +/** This class runs an IMAP search operation */ + +#import + +@class MCOIndexSet; + +@interface MCOIMAPSearchOperation : MCOIMAPBaseOperation + +/** + Starts the asynchronous search operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `searchResults` will contain the UIDs of any matching messages + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in MCOConstants.h, `searchResult` will be nil +*/ + +- (void) start:(void (^)(NSError * error, MCOIndexSet * searchResult))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIMAPSession.h b/MailCore.framework/Versions/A/Headers/MCOIMAPSession.h new file mode 100755 index 0000000..7a35b7e --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIMAPSession.h @@ -0,0 +1,711 @@ +// +// MCOIMAPSession.h +// mailcore2 +// +// Created by Matt Ronge on 1/31/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOIMAPSESSION_H + +#define MAILCORE_MCOIMAPSESSION_H + +#import +#import + +@class MCOIMAPFetchFoldersOperation; +@class MCOIMAPOperation; +@class MCOIMAPNamespace; +@class MCOIMAPFolderInfoOperation; +@class MCOIMAPFolderStatusOperation; +@class MCOIMAPAppendMessageOperation; +@class MCOIMAPCopyMessagesOperation; +@class MCOIndexSet; +@class MCOIMAPFetchMessagesOperation; +@class MCOIMAPFetchContentOperation; +@class MCOIMAPSearchOperation; +@class MCOIMAPIdleOperation; +@class MCOIMAPFetchNamespaceOperation; +@class MCOIMAPSearchExpression; +@class MCOIMAPIdentityOperation; +@class MCOIMAPCapabilityOperation; +@class MCOIMAPQuotaOperation; +@class MCOIMAPMessageRenderingOperation; +@class MCOIMAPMessage; +@class MCOIMAPIdentity; + +/** + This is the main IMAP class from which all operations are created + + After calling a method that returns an operation you must call start: on the instance + to begin the operation. +*/ + +@interface MCOIMAPSession : NSObject + +/** This is the hostname of the IMAP server to connect to. */ +@property (nonatomic, copy) NSString *hostname; + +/** This is the port of the IMAP server to connect to. */ +@property (nonatomic, assign) unsigned int port; + +/** This is the username of the account. */ +@property (nonatomic, copy) NSString *username; + +/** This is the password of the account. */ +@property (nonatomic, copy) NSString *password; + +/** This is the OAuth2 token. */ +@property (nonatomic, copy) NSString *OAuth2Token; + +/** + This is the authentication type to use to connect. + `MCOAuthTypeSASLNone` means that it uses the clear-text is used (and is the default). + @warning *Important*: Over an encrypted connection like TLS, the password will still be secure +*/ +@property (nonatomic, assign) MCOAuthType authType; + +/** + This is the encryption type to use. + See MCOConnectionType for more information. +*/ +@property (nonatomic, assign) MCOConnectionType connectionType; + +/** This is the timeout of the connection. */ +@property (nonatomic, assign) NSTimeInterval timeout; + +/** When set to YES, the connection will fail if the certificate is incorrect. */ +@property (nonatomic, assign, getter=isCheckCertificateEnabled) BOOL checkCertificateEnabled; + +/** When set to YES, VoIP capability will be enabled on the IMAP connection on iOS */ +@property (nonatomic, assign, getter=isVoIPEnabled) BOOL voIPEnabled; + +/** The default namespace. */ +@property (nonatomic, strong) MCOIMAPNamespace * defaultNamespace; + +/** The identity of the IMAP client. */ +@property (nonatomic, strong, readonly) MCOIMAPIdentity * clientIdentity; + +/** The identity of the IMAP server. */ +@property (nonatomic, strong, readonly) MCOIMAPIdentity * serverIdentity; + +/** Display name of the Gmail user. It will be nil if it's not a Gmail server. */ +@property (nonatomic, copy, readonly) NSString * gmailUserDisplayName; + +/** + When set to YES, the session is allowed open to open several connections to the same folder. + @warning Some older IMAP servers don't like this +*/ +@property (nonatomic, assign) BOOL allowsFolderConcurrentAccessEnabled; + +/** + Maximum number of connections to the server allowed. +*/ +@property (nonatomic, assign) unsigned int maximumConnections; + +/** + Sets logger callback. The network traffic will be sent to this block. + + [session setConnectionLogger:^(void * connectionID, MCOConnectionLogType type, NSData * data) { + NSLog(@"%@", [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]); + // ... + }]; +*/ +@property (nonatomic, copy) MCOConnectionLogger connectionLogger; + +/** This property provides some hints to MCOIMAPSession about where it's called from. + It will make MCOIMAPSession safe. It will also set all the callbacks of operations to run on this given queue. + Defaults to the main queue. + This property should be used only if there's performance issue using MCOIMAPSession in the main thread. */ +#if OS_OBJECT_USE_OBJC +@property (nonatomic, retain) dispatch_queue_t dispatchQueue; +#else +@property (nonatomic, assign) dispatch_queue_t dispatchQueue; +#endif + +/** + The value will be YES when asynchronous operations are running, else it will return NO. +*/ +@property (nonatomic, assign, readonly, getter=isOperationQueueRunning) BOOL operationQueueRunning; + +/** + Sets operation running callback. It will be called when operations start or stop running. + + [session setOperationQueueRunningChangeBlock:^{ + if ([session isOperationQueueRunning]) { + ... + } + else { + ... + } + }]; +*/ +@property (nonatomic, copy) MCOOperationQueueRunningChangeBlock operationQueueRunningChangeBlock; + +/** + Cancel all operations + */ +- (void) cancelAllOperations; + +/** @name Folder Operations */ + +/** + Returns an operation that retrieves folder metadata (like UIDNext) + + MCOIMAPFolderInfoOperation * op = [session folderInfoOperation:@"INBOX"]; + [op start:^(NSError *error, MCOIMAPFolderInfo * info) { + NSLog(@"UIDNEXT: %lu", (unsigned long) [info uidNext]); + NSLog(@"UIDVALIDITY: %lu", (unsigned long) [info uidValidity]); + NSLog(@"HIGHESTMODSEQ: %llu", (unsigned long long) [info modSequenceValue]); + NSLog(@"messages count: %lu", [info messageCount]); + }]; +*/ + +- (MCOIMAPFolderInfoOperation *) folderInfoOperation:(NSString *)folder; + +/** + Returns an operation that retrieves folder status (like UIDNext - Unseen -) + + MCOIMAPFolderStatusOperation * op = [session folderStatusOperation:@"INBOX"]; + [op start:^(NSError *error, MCOIMAPFolderStatus * info) { + NSLog(@"UIDNEXT: %lu", (unsigned long) [info uidNext]); + NSLog(@"UIDVALIDITY: %lu", (unsigned long) [info uidValidity]); + NSLog(@"messages count: %lu", [info totalMessages]); + }]; + */ + +- (MCOIMAPFolderStatusOperation *) folderStatusOperation:(NSString *)folder; + +/** + Returns an operation that gets the list of subscribed folders. + + MCOIMAPFetchFoldersOperation * op = [session fetchSubscribedFoldersOperation]; + [op start:^(NSError * error, NSArray * folders) { + ... + }]; + */ + +- (MCOIMAPFetchFoldersOperation *) fetchSubscribedFoldersOperation; + +/** + Returns an operation that gets all folders + + MCOIMAPFetchFoldersOperation * op = [session fetchAllFoldersOperation]; + [op start:^(NSError * error, NSArray *folders) { + ... + }]; +*/ +- (MCOIMAPFetchFoldersOperation *) fetchAllFoldersOperation; + +/** + Creates an operation for renaming a folder + + MCOIMAPOperation * op = [session renameFolderOperation:@"my documents" otherName:@"Documents"]; + [op start:^(NSError * error) { + ... + }]; + +*/ +- (MCOIMAPOperation *) renameFolderOperation:(NSString *)folder otherName:(NSString *)otherName; + +/** + Create an operation for deleting a folder + + MCOIMAPOperation * op = [session deleteFolderOperation:@"holidays 2009"]; + [op start:^(NSError * error) { + ... + }]]; +*/ +- (MCOIMAPOperation *) deleteFolderOperation:(NSString *)folder; + +/** + Returns an operation that creates a new folder + + MCOIMAPOperation * op = [session createFolderOperation:@"holidays 2013"]; + [op start:^(NSError * error) { + ... + }]; +*/ +- (MCOIMAPOperation *) createFolderOperation:(NSString *)folder; + +/** + Returns an operation to subscribe to a folder. + + MCOIMAPOperation * op = [session createFolderOperation:@"holidays 2013"]; + [op start:^(NSError * error) { + if (error != nil) + return; + MCOIMAPOperation * op = [session subscribeFolderOperation:@"holidays 2013"]; + ... + }]; +*/ +- (MCOIMAPOperation *) subscribeFolderOperation:(NSString *)folder; + +/** + Returns an operation to unsubscribe from a folder. + + MCOIMAPOperation * op = [session unsubscribeFolderOperation:@"holidays 2009"]; + [op start:^(NSError * error) { + if (error != nil) + return; + MCOIMAPOperation * op = [session deleteFolderOperation:@"holidays 2009"] + ... + }]; +*/ +- (MCOIMAPOperation *) unsubscribeFolderOperation:(NSString *)folder; + +/** + Returns an operation to expunge a folder. + + MCOIMAPOperation * op = [session expungeOperation:@"INBOX"]; + [op start:^(NSError * error) { + ... + }]; +*/ +- (MCOIMAPOperation *) expungeOperation:(NSString *)folder; + +/** @name Message Actions */ + +/** + Returns an operation to add a message to a folder. + + MCOIMAPOperation * op = [session appendMessageOperationWithFolder:@"Sent Mail" messageData:rfc822Data flags:MCOMessageFlagNone]; + [op start:^(NSError * error, uint32_t createdUID) { + if (error == nil) { + NSLog(@"created message with UID %lu", (unsigned long) createdUID); + } + }]; +*/ +- (MCOIMAPAppendMessageOperation *)appendMessageOperationWithFolder:(NSString *)folder + messageData:(NSData *)messageData + flags:(MCOMessageFlag)flags; + +/** + Returns an operation to add a message with custom flags to a folder. + + MCOIMAPOperation * op = [session appendMessageOperationWithFolder:@"Sent Mail" messageData:rfc822Data flags:MCOMessageFlagNone customFlags:@[@"$CNS-Greeting-On"]]; + [op start:^(NSError * error, uint32_t createdUID) { + if (error == nil) { + NSLog(@"created message with UID %lu", (unsigned long) createdUID); + } + }]; + */ +- (MCOIMAPAppendMessageOperation *)appendMessageOperationWithFolder:(NSString *)folder + messageData:(NSData *)messageData + flags:(MCOMessageFlag)flags + customFlags:(NSArray *)customFlags; + +/** + Returns an operation to copy messages to a folder. + + MCOIMAPCopyMessagesOperation * op = [session copyMessagesOperationWithFolder:@"INBOX" + uids:[MCIndexSet indexSetWithIndex:456] + destFolder:@"Cocoa"]; + [op start:^(NSError * error, NSDictionary * uidMapping) { + NSLog(@"copied to folder with UID mapping %@", uidMapping); + }]; +*/ +- (MCOIMAPCopyMessagesOperation *)copyMessagesOperationWithFolder:(NSString *)folder + uids:(MCOIndexSet *)uids + destFolder:(NSString *)destFolder NS_RETURNS_NOT_RETAINED; + +/** + Returns an operation to change flags of messages. + + For example: Adds the seen flag to the message with UID 456. + + MCOIMAPOperation * op = [session storeFlagsOperationWithFolder:@"INBOX" + uids:[MCOIndexSet indexSetWithIndex:456] + kind:MCOIMAPStoreFlagsRequestKindAdd + flags:MCOMessageFlagSeen]; + [op start:^(NSError * error) { + ... + }]; +*/ +- (MCOIMAPOperation *) storeFlagsOperationWithFolder:(NSString *)folder + uids:(MCOIndexSet *)uids + kind:(MCOIMAPStoreFlagsRequestKind)kind + flags:(MCOMessageFlag)flags; +/** + Returns an operation to change flags and custom flags of messages. + + For example: Adds the seen flag and $CNS-Greeting-On flag to the message with UID 456. + + MCOIMAPOperation * op = [session storeFlagsOperationWithFolder:@"INBOX" + uids:[MCOIndexSet indexSetWithIndex:456] + kind:MCOIMAPStoreFlagsRequestKindAdd + flags:MCOMessageFlagSeen + customFlags:@["$CNS-Greeting-On"]]; + [op start:^(NSError * error) { + ... + }]; + */ +- (MCOIMAPOperation *) storeFlagsOperationWithFolder:(NSString *)folder + uids:(MCOIndexSet *)uids + kind:(MCOIMAPStoreFlagsRequestKind)kind + flags:(MCOMessageFlag)flags + customFlags:(NSArray *)customFlags; +/** + Returns an operation to change labels of messages. Intended for Gmail + + For example: Adds the label "Home" flag to the message with UID 456. + + MCOIMAPOperation * op = [session storeFlagsOperationWithFolder:@"INBOX" + uids:[MCOIndexSet indexSetWithIndex:456] + kind:MCOIMAPStoreFlagsRequestKindAdd + labels:[NSArray arrayWithObject:@"Home"]]; + [op start:^(NSError * error) { + ... + }]; +*/ +- (MCOIMAPOperation *) storeLabelsOperationWithFolder:(NSString *)folder + uids:(MCOIndexSet *)uids + kind:(MCOIMAPStoreFlagsRequestKind)kind + labels:(NSArray *)labels; + +/** @name Fetching Messages */ + +/** + Returns an operation to fetch messages by UID. + + MCOIMAPFetchMessagesOperation * op = [session fetchMessagesByUIDOperationWithFolder:@"INBOX" + requestKind:MCOIMAPMessagesRequestKindHeaders | MCOIMAPMessagesRequestKindStructure + uids:MCORangeMake(1, UINT64_MAX)]; + [op start:^(NSError * error, NSArray * messages, MCOIndexSet * vanishedMessages) { + for(MCOIMAPMessage * msg in messages) { + NSLog(@"%lu: %@", [msg uid], [msg header]); + } + }]; +*/ +- (MCOIMAPFetchMessagesOperation *) fetchMessagesByUIDOperationWithFolder:(NSString *)folder + requestKind:(MCOIMAPMessagesRequestKind)requestKind + uids:(MCOIndexSet *)uids; + +/** + Returns an operation to fetch messages by (sequence) number. + For example: show 50 most recent uids. + NSString *folder = @"INBOX"; + MCOIMAPFolderInfoOperation *folderInfo = [session folderInfoOperation:folder]; + + [folderInfo start:^(NSError *error, MCOIMAPFolderInfo *info) { + int numberOfMessages = 50; + numberOfMessages -= 1; + MCOIndexSet *numbers = [MCOIndexSet indexSetWithRange:MCORangeMake([info messageCount] - numberOfMessages, numberOfMessages)]; + + MCOIMAPFetchMessagesOperation *fetchOperation = [session fetchMessagesByNumberOperationWithFolder:folder + requestKind:MCOIMAPMessagesRequestKindUid + numbers:numbers]; + + [fetchOperation start:^(NSError *error, NSArray *messages, MCOIndexSet *vanishedMessages) { + for (MCOIMAPMessage * message in messages) { + NSLog(@"%u", [message uid]); + } + }]; + }]; +*/ +- (MCOIMAPFetchMessagesOperation *) fetchMessagesByNumberOperationWithFolder:(NSString *)folder + requestKind:(MCOIMAPMessagesRequestKind)requestKind + numbers:(MCOIndexSet *)numbers; + +/** + Returns an operation to sync the last changes related to the given message list given a modSeq. + + MCOIMAPFetchMessagesOperation * op = [session syncMessagesByUIDWithFolder:@"INBOX" + requestKind:MCOIMAPMessagesRequestKindUID + uids:MCORangeMake(1, UINT64_MAX) + modSeq:lastModSeq]; + [op start:^(NSError * error, NSArray * messages, MCOIndexSet * vanishedMessages) { + NSLog(@"added or modified messages: %@", messages); + NSLog(@"deleted messages: %@", vanishedMessages); + }]; + +@warn *Important*: This is only for servers that support Conditional Store. See [RFC4551](http://tools.ietf.org/html/rfc4551) +vanishedMessages will be set only for servers that support QRESYNC. See [RFC5162](http://tools.ietf.org/html/rfc5162) +*/ +- (MCOIMAPFetchMessagesOperation *) syncMessagesByUIDWithFolder:(NSString *)folder + requestKind:(MCOIMAPMessagesRequestKind)requestKind + uids:(MCOIndexSet *)uids + modSeq:(uint64_t)modSeq; + +/** + Returns an operation to fetch the content of a message. + @param urgent is set to YES, an additional connection to the same folder might be opened to fetch the content. + + MCOIMAPFetchContentOperation * op = [session fetchMessageByUIDOperationWithFolder:@"INBOX" uid:456 urgent:NO]; + [op start:^(NSError * error, NSData * messageData) { + MCOMessageParser * parser = [MCOMessageParser messageParserWithData:messageData] + ... + }]; +*/ +- (MCOIMAPFetchContentOperation *) fetchMessageByUIDOperationWithFolder:(NSString *)folder + uid:(uint32_t)uid + urgent:(BOOL)urgent; + +/** + Returns an operation to fetch the content of a message. + + MCOIMAPFetchContentOperation * op = [session fetchMessageByUIDOperationWithFolder:@"INBOX" uid:456]; + [op start:^(NSError * error, NSData * messageData) { + MCOMessageParser * parser = [MCOMessageParser messageParserWithData:messageData] + ... + }]; +*/ +- (MCOIMAPFetchContentOperation *) fetchMessageByUIDOperationWithFolder:(NSString *)folder + uid:(uint32_t)uid; + +/** @name Fetching Attachment Operations */ + +/** + Returns an operation to fetch an attachment. + @param urgent is set to YES, an additional connection to the same folder might be opened to fetch the content. + + MCOIMAPFetchContentOperation * op = [session fetchMessageAttachmentByUIDOperationWithFolder:@"INBOX" + uid:456 + partID:@"1.2" + encoding:MCOEncodingBase64 + urgent:YES]; + [op start:^(NSError * error, NSData * partData) { + ... + }]; +*/ +- (MCOIMAPFetchContentOperation *) fetchMessageAttachmentByUIDOperationWithFolder:(NSString *)folder + uid:(uint32_t)uid + partID:(NSString *)partID + encoding:(MCOEncoding)encoding + urgent:(BOOL)urgent; + +/** + Returns an operation to fetch an attachment. + + Example 1: + + MCOIMAPFetchContentOperation * op = [session fetchMessageAttachmentByUIDOperationWithFolder:@"INBOX" + uid:456 + partID:@"1.2" + encoding:MCOEncodingBase64]; + [op start:^(NSError * error, NSData * partData) { + ... + }]; + + Example 2: + + MCOIMAPFetchContentOperation * op = [session fetchMessageAttachmentByUIDOperationWithFolder:@"INBOX" + uid:[message uid] + partID:[part partID] + encoding:[part encoding]]; + [op start:^(NSError * error, NSData * partData) { + ... + }]; +*/ +- (MCOIMAPFetchContentOperation *) fetchMessageAttachmentByUIDOperationWithFolder:(NSString *)folder + uid:(uint32_t)uid + partID:(NSString *)partID + encoding:(MCOEncoding)encoding; + +/** @name General IMAP Actions */ + +/** + Returns an operation to wait for something to happen in the folder. + See [RFC2177](http://tools.ietf.org/html/rfc2177) for me info. + + MCOIMAPIdleOperation * op = [session idleOperationWithFolder:@"INBOX" + lastKnownUID:0]; + [op start:^(NSError * error) { + ... + }]; +*/ +- (MCOIMAPIdleOperation *) idleOperationWithFolder:(NSString *)folder + lastKnownUID:(uint32_t)lastKnownUID; + +/** + Returns an operation to fetch the list of namespaces. + + MCOIMAPFetchNamespaceOperation * op = [session fetchNamespaceOperation]; + [op start:^(NSError * error, NSDictionary * namespaces) { + if (error != nil) + return; + MCOIMAPNamespace * ns = [namespace objectForKey:MCOIMAPNamespacePersonal]; + NSString * path = [ns pathForComponents:[NSArray arrayWithObject:]]; + MCOIMAPOperation * createOp = [session createFolderOperation:foobar]; + [createOp start:^(NSError * error) { + ... + }]; + }]; +*/ +- (MCOIMAPFetchNamespaceOperation *) fetchNamespaceOperation; + +/** + Returns an operation to send the client or get the server identity. + + MCOIMAPIdentity * identity = [MCOIMAPIdentity identityWithVendor:@"Mozilla" name:@"Thunderbird" version:@"17.0.5"]; + MCOIMAPIdentityOperation * op = [session identityOperationWithClientIdentity:identity]; + [op start:^(NSError * error, MCOIMAPIdentity * serverIdentity) { + ... + }]; +*/ +- (MCOIMAPIdentityOperation *) identityOperationWithClientIdentity:(MCOIMAPIdentity *)identity; + +/** + Returns an operation that will connect to the given IMAP server without authenticating. + Useful for checking initial server capabilities. + + MCOIMAPOperation * op = [session connectOperation]; + [op start:^(NSError * error) { + ... + }]; + */ +- (MCOIMAPOperation *)connectOperation; + +/** + Returns an operation that will perform a No-Op operation on the given IMAP server. + + MCOIMAPOperation * op = [session noopOperation]; + [op start:^(NSError * error) { + ... + }]; + */ +- (MCOIMAPOperation *) noopOperation; + +/** + Returns an operation that will check whether the IMAP account is valid. + + MCOIMAPOperation * op = [session checkAccountOperation]; + [op start:^(NSError * error) { + ... + }]; +*/ + +- (MCOIMAPOperation *) checkAccountOperation; + +/** + Returns an operation to request capabilities of the server. + See MCOIMAPCapability for the list of capabilities. + + canIdle = NO; + MCOIMAPCapabilityOperation * op = [session capabilityOperation]; + [op start:^(NSError * error, MCOIndexSet * capabilities) { + if ([capabilities containsIndex:MCOIMAPCapabilityIdle]) { + canIdle = YES; + } + }]; +*/ +- (MCOIMAPCapabilityOperation *) capabilityOperation; + +- (MCOIMAPQuotaOperation *) quotaOperation; + +/** @name Search Operations */ + +/** + Returns an operation to search for messages with a simple match. + + MCOIMAPSearchOperation * op = [session searchOperationWithFolder:@"INBOX" + kind:MCOIMAPSearchKindFrom + searchString:@"laura"]; + [op start:^(NSError * error, MCOIndexSet * searchResult) { + ... + }]; +*/ +- (MCOIMAPSearchOperation *) searchOperationWithFolder:(NSString *)folder + kind:(MCOIMAPSearchKind)kind + searchString:(NSString *)searchString; + +/** + Returns an operation to search for messages. + + MCOIMAPSearchExpression * expr = [MCOIMAPSearchExpression searchFrom:@"laura@etpan.org"] + MCOIMAPSearchOperation * op = [session searchExpressionOperationWithFolder:@"INBOX" + expression:expr]; + [op start:^(NSError * error, MCOIndexSet * searchResult) { + ... + }]; +*/ +- (MCOIMAPSearchOperation *) searchExpressionOperationWithFolder:(NSString *)folder + expression:(MCOIMAPSearchExpression *)expression; + +/** @name Rendering Operations */ + +/** + Returns an operation to render the HTML version of a message to be displayed in a web view. + + MCOIMAPMessageRenderingOperation * op = [session htmlRenderingOperationWithMessage:msg + folder:@"INBOX"]; + + [op start:^(NSString * htmlString, NSError * error) { + ... + }]; +*/ +- (MCOIMAPMessageRenderingOperation *) htmlRenderingOperationWithMessage:(MCOIMAPMessage *)message + folder:(NSString *)folder; + +/** + Returns an operation to render the HTML body of a message to be displayed in a web view. + + MCOIMAPMessageRenderingOperation * op = [session htmlBodyRenderingOperationWithMessage:msg + folder:@"INBOX"]; + + [op start:^(NSString * htmlString, NSError * error) { + ... + }]; + */ +- (MCOIMAPMessageRenderingOperation *) htmlBodyRenderingOperationWithMessage:(MCOIMAPMessage *)message + folder:(NSString *)folder; + +/** + Returns an operation to render the plain text version of a message. + + MCOIMAPMessageRenderingOperation * op = [session plainTextRenderingOperationWithMessage:msg + folder:@"INBOX"]; + + [op start:^(NSString * htmlString, NSError * error) { + ... + }]; + */ +- (MCOIMAPMessageRenderingOperation *) plainTextRenderingOperationWithMessage:(MCOIMAPMessage *)message + folder:(NSString *)folder; + +/** + Returns an operation to render the plain text body of a message. + All end of line will be removed and white spaces cleaned up if requested. + This method can be used to generate the summary of the message. + + MCOIMAPMessageRenderingOperation * op = [session plainTextBodyRenderingOperationWithMessage:msg + folder:@"INBOX" + stripWhitespace:YES]; + + [op start:^(NSString * htmlString, NSError * error) { + ... + }]; + */ +- (MCOIMAPMessageRenderingOperation *) plainTextBodyRenderingOperationWithMessage:(MCOIMAPMessage *)message + folder:(NSString *)folder + stripWhitespace:(BOOL)stripWhitespace; + +/** + Returns an operation to render the plain text body of a message. + All end of line will be removed and white spaces cleaned up. + This method can be used to generate the summary of the message. + + MCOIMAPMessageRenderingOperation * op = [session plainTextBodyRenderingOperationWithMessage:msg + folder:@"INBOX"]; + + [op start:^(NSString * htmlString, NSError * error) { + ... + }]; + */ +- (MCOIMAPMessageRenderingOperation *) plainTextBodyRenderingOperationWithMessage:(MCOIMAPMessage *)message + folder:(NSString *)folder; + +/** + Returns an operation to disconnect the session. + It will disconnect all the sockets created by the session. + + MCOIMAPOperation * op = [session disconnectOperation]; + [op start:^(NSError * error) { + ... + }]; + */ +- (MCOIMAPOperation *) disconnectOperation; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOIndexSet.h b/MailCore.framework/Versions/A/Headers/MCOIndexSet.h new file mode 100644 index 0000000..3705fa3 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOIndexSet.h @@ -0,0 +1,74 @@ +// +// MCOIndexSet.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/23/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOINDEXSET_H + +#define MAILCORE_MCOINDEXSET_H + +#import + +#import + +/** similar to NSMutableIndexSet but supports int64_t. MCORange has a location (uint64_t) and length (uint64_t). */ + +@interface MCOIndexSet : NSObject + +/** Creates an empty index set.*/ ++ (MCOIndexSet *) indexSet; + +/** Creates an index set that contains a range of integers.*/ ++ (MCOIndexSet *) indexSetWithRange:(MCORange)range; + +/** Creates an index set with a single integer.*/ ++ (MCOIndexSet *) indexSetWithIndex:(uint64_t)idx; + +/** Returns the number of integers in that index set.*/ +- (unsigned int) count; + +/** Adds an integer to the index set.*/ +- (void) addIndex:(uint64_t)idx; + +/** Removes an integer from the index set.*/ +- (void) removeIndex:(uint64_t)idx; + +/** Returns YES if the index set contains the given integer.*/ +- (BOOL) containsIndex:(uint64_t)idx; + +/** Adds a range of integers to the index set.*/ +- (void) addRange:(MCORange)range; + +/** Removes a range of integers from the index set.*/ +- (void) removeRange:(MCORange)range; + +/** Removes all integers that are not in the given range.*/ +- (void) intersectsRange:(MCORange)range; + +/** Adds all indexes from an other index set to the index set.*/ +- (void) addIndexSet:(MCOIndexSet *)indexSet; + +/** Remove all indexes from an other index set from the index set.*/ +- (void) removeIndexSet:(MCOIndexSet *)indexSet; + +/** Removes all integers that are not in the given index set.*/ +- (void) intersectsIndexSet:(MCOIndexSet *)indexSet; + +/** Returns all the ranges of ths index set.*/ +- (MCORange *) allRanges; + +/** Returns the number of ranges in this index set.*/ +- (unsigned int) rangesCount; + +/** Enumerates all the indexes of the index set.*/ +- (void) enumerateIndexes:(void (^)(uint64_t idx))block; + +/** Returns an NSIndexSet from a MCOIndexSet */ +- (NSIndexSet *) nsIndexSet; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOMailProvider.h b/MailCore.framework/Versions/A/Headers/MCOMailProvider.h new file mode 100644 index 0000000..85a23a8 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOMailProvider.h @@ -0,0 +1,86 @@ +// +// MCOMailProvider.h +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#import + +/** + Represents a email service provider, like for example Gmail, Yahoo, Fastmail.fm etc. +*/ + +@interface MCOMailProvider : NSObject + +@property (nonatomic, copy) NSString * identifier; + +- (id) initWithInfo:(NSDictionary *)info; + +/** + A list of ways that you can connect to the IMAP server + @return An array of MCONetService +*/ +- (NSArray * /* MCONetService */) imapServices; + +/** + A list of ways that you can connect to the SMTP server + @return An array of MCONetService +*/ +- (NSArray * /* MCONetService */) smtpServices; + +/** + A list of ways that you can connect to the POP3 server + @return An array of MCONetService +*/ +- (NSArray * /* MCONetService */) popServices; + +- (BOOL) matchEmail:(NSString *)email; +- (BOOL) matchMX:(NSString *)hostname; + +/** + Where sent mail is stored on the IMAP server + @return Returns nil if it is unknown +*/ +- (NSString *) sentMailFolderPath; + +/** + Where starred mail is stored on the IMAP server. + This only applies to some servers like Gmail + @return Returns nil if it is unknown +*/ +- (NSString *) starredFolderPath; + +/** + Where all mail or the archive folder is stored on the IMAP server + @return Returns nil if it is unknown +*/ +- (NSString *) allMailFolderPath; + +/** + Where trash is stored on the IMAP server + @return Returns nil if it is unknown +*/ +- (NSString *) trashFolderPath; + +/** + Where draft messages are stored on the IMAP server + @return Returns nil if it is unknown +*/ +- (NSString *) draftsFolderPath; + +/** + Where spam messages are stored on the IMAP server + @return Returns nil if it is unknown +*/ +- (NSString *) spamFolderPath; + +/** + Where important messages are stored on the IMAP server + This only applies to some servers, like Gmail + @return Returns nil if it is unknown +*/ +- (NSString *) importantFolderPath; + +@end diff --git a/MailCore.framework/Versions/A/Headers/MCOMailProvidersManager.h b/MailCore.framework/Versions/A/Headers/MCOMailProvidersManager.h new file mode 100644 index 0000000..09df25a --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOMailProvidersManager.h @@ -0,0 +1,51 @@ +// +// MCOMailProvidersManager.h +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#import + +/** + This class is used to detect an email provider and it's associated + metadata either by MX record or by the email addresss. + + An app might want to use this during setup to limit the number of settings + a user has to input. +*/ + +@class MCOMailProvider; + +@interface MCOMailProvidersManager : NSObject + +/** The shared manager that is used for all lookups */ ++ (MCOMailProvidersManager *) sharedManager; + +/** + Given an email address will try to determine the provider + @return The email provider info or nil if it can't be determined. +*/ +- (MCOMailProvider *) providerForEmail:(NSString *)email; + +/** + Given the DNS MX record will try to determine the provider + @return The email provider info or nil if it can't be determined. +*/ +- (MCOMailProvider *) providerForMX:(NSString *)hostname; + +/** + Will return information about a provider. Useful if you already know the + provider (like if it has been determined previously) + @return The email provider info or nil if none matches +*/ +- (MCOMailProvider *) providerForIdentifier:(NSString *)identifier; + +/** + Registers the providers in the JSON file at the file path so they + can be used with MCOMailProvidersManager. + */ +- (void) registerProvidersWithFilename:(NSString *)filename; + +@end diff --git a/MailCore.framework/Versions/A/Headers/MCOMessageBuilder.h b/MailCore.framework/Versions/A/Headers/MCOMessageBuilder.h new file mode 100644 index 0000000..a52afc0 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOMessageBuilder.h @@ -0,0 +1,80 @@ +// +// MCOMessageBuilder.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/22/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOMESSAGEBUILDER_H + +#define MAILCORE_MCOMESSAGEBUILDER_H + +#import + +/** + This class will allow you to build a RFC 822 formatted message. + For example when you need to send a message using SMTP, + you need to generate first a RFC 822 formatted message. + This class will help you do that. + + MCOMessageBuilder * builder = [[MCOMessageBuilder alloc] init]; + [[builder header] setFrom:[MCOAddress addressWithDisplayName:@"Hoa V. DINH" mailbox:@"hoa@etpan.org"]; + NSArray * to = [NSArray arrayWithObject:[MCOAddress addressWithDisplayName:@"Gael Roualland" mailbox:@"gael@etpan.org"]]; + [[builder header] setTo:to]; + [[builder header] setSubject:@"A nice picture!"]; + [builder setHTMLBody:@"
Here's the message I need to send.
"]; + [builder addAttachment:[MCOAttachment attachmentWithContentsOfFile:@"/Users/foo/Pictures/image.jpg"]]; + NSData * rfc822Data = [builder data]; + +*/ + +@class MCOAttachment; +@protocol MCOHTMLRendererDelegate; + +@interface MCOMessageBuilder : MCOAbstractMessage + +/** Main HTML content of the message.*/ +@property (nonatomic, copy, setter=setHTMLBody:) NSString * htmlBody; + +/** Plain text content of the message.*/ +@property (nonatomic, copy) NSString * textBody; + +/** List of file attachments.*/ +@property (nonatomic, copy) NSArray * /* MCOAttachment */ attachments; + +/** List of related file attachments (included as cid: link in the HTML part).*/ +@property (nonatomic, copy) NSArray * /* MCOAttachment */ relatedAttachments; + +/** Prefix for the boundary identifier. Default value is nil.*/ +@property (nonatomic, copy) NSString * boundaryPrefix; + +/** Add an attachment.*/ +- (void) addAttachment:(MCOAttachment *)attachment; + +/** Add a related attachment.*/ +- (void) addRelatedAttachment:(MCOAttachment *)attachment; + +/** RFC 822 formatted message.*/ +- (NSData *) data; + +/** HTML rendering of the message to be displayed in a web view. The delegate can be nil.*/ +- (NSString *) htmlRenderingWithDelegate:(id )delegate; + +/** HTML rendering of the body of the message to be displayed in a web view.*/ +- (NSString *) htmlBodyRendering; + +/** Text rendering of the message.*/ +- (NSString *) plainTextRendering; + +/** Text rendering of the body of the message. All end of line will be removed and white spaces cleaned up. + This method can be used to generate the summary of the message.*/ +- (NSString *) plainTextBodyRendering; + +/** Text rendering of the body of the message. All end of line will be removed and white spaces cleaned up if requested. + This method can be used to generate the summary of the message.*/ +- (NSString *) plainTextBodyRenderingAndStripWhitespace:(BOOL)stripWhitespace; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOMessageHeader.h b/MailCore.framework/Versions/A/Headers/MCOMessageHeader.h new file mode 100644 index 0000000..f9bb222 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOMessageHeader.h @@ -0,0 +1,101 @@ +// +// MCOMessageHeader.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/10/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOMESSAGEHEADER_H + +#define MAILCORE_MCOMESSAGEHEADER_H + +#import + +/** This class implements common fields of a message header.*/ + +@class MCOAddress; + +@interface MCOMessageHeader : NSObject + +/** Message-ID field.*/ +@property (nonatomic, copy) NSString * messageID; + +/** Message-ID auto-generated flag.*/ +@property (nonatomic, readonly, getter=isMessageIDAutoGenerated) BOOL messageIDAutoGenerated; + +/** References field. It's an array of message-ids.*/ +@property (nonatomic, copy) NSArray * /* NSString */ references; + +/** In-Reply-To field. It's an array of message-ids.*/ +@property (nonatomic, copy) NSArray * /* NSString */ inReplyTo; + +/** Date field: sent date of the message.*/ +@property (nonatomic, strong) NSDate * date; + +/** Received date: received date of the message.*/ +@property (nonatomic, strong) NSDate * receivedDate; + +/** Sender field.*/ +@property (nonatomic, copy) MCOAddress * sender; + +/** From field: address of the sender of the message.*/ +@property (nonatomic, copy) MCOAddress * from; + +/** To field: recipient of the message. It's an array of MCOAddress.*/ +@property (nonatomic, copy) NSArray * /* MCOAddress */ to; + +/** Cc field: cc recipient of the message. It's an array of MCOAddress.*/ +@property (nonatomic, copy) NSArray * /* MCOAddress */ cc; + +/** Bcc field: bcc recipient of the message. It's an array of MCOAddress.*/ +@property (nonatomic, copy) NSArray * /* MCOAddress */ bcc; + +/** Reply-To field. It's an array of MCOAddress.*/ +@property (nonatomic, copy) NSArray * /* MCOAddress */ replyTo; + +/** Subject of the message.*/ +@property (nonatomic, copy) NSString * subject; + +/** Email user agent name: X-Mailer header.*/ +@property (nonatomic, copy) NSString * userAgent; + +/** Returns a header created from RFC 822 data.*/ ++ (MCOMessageHeader *) headerWithData:(NSData *)data; + +/** Initialize a header with RFC 822 data.*/ +- (id) initWithData:(NSData *)data; + +/** Adds a custom header.*/ +- (void) setExtraHeaderValue:(NSString *)value forName:(NSString *)name; + +/** Remove a given custom header.*/ +- (void) removeExtraHeaderForName:(NSString *)name; + +/** Returns the value of a given custom header.*/ +- (NSString *) extraHeaderValueForName:(NSString *)name; + +/** Returns an array with the names of all custom headers.*/ +- (NSArray * /* NSString */) allExtraHeadersNames; + +/** Extracted subject (also remove square brackets).*/ +- (NSString *) extractedSubject; + +/** Extracted subject (don't remove square brackets).*/ +- (NSString *) partialExtractedSubject; + +/** Fill the header using the given RFC 822 data.*/ +- (void) importHeadersData:(NSData *)data; + +/** Returns a header that can be used as a base for a reply message.*/ +- (MCOMessageHeader *) replyHeaderWithExcludedRecipients:(NSArray *)excludedRecipients; + +/** Returns a header that can be used as a base for a reply all message.*/ +- (MCOMessageHeader *) replyAllHeaderWithExcludedRecipients:(NSArray *)excludedRecipients; + +/** Returns a header that can be used as a base for a forward message.*/ +- (MCOMessageHeader *) forwardHeader; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOMessageParser.h b/MailCore.framework/Versions/A/Headers/MCOMessageParser.h new file mode 100644 index 0000000..6bbed0b --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOMessageParser.h @@ -0,0 +1,57 @@ +// +// MCOMessageParser.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/22/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOMESSAGEPARSER_H + +#define MAILCORE_MCOMESSAGEPARSER_H + +/** + This class implements a parsed message. + When the full content of a message has been fetched using POP or IMAP, + you need to parse it. +*/ + +#import + +@protocol MCOHTMLRendererDelegate; + +@interface MCOMessageParser : MCOAbstractMessage + +/** returns a parsed message from the given RFC 822 data.*/ ++ (MCOMessageParser *) messageParserWithData:(NSData *)data; + +/** data is the RFC 822 formatted message.*/ +- (id) initWithData:(NSData *)data; +- (void) dealloc; + +/** It's the main part of the message. It can be MCOMessagePart, MCOMultipart or MCOAttachment.*/ +- (MCOAbstractPart *) mainPart; + +/** data of the RFC 822 formatted message. It's the input of the parser.*/ +- (NSData *) data; + +/** HTML rendering of the message to be displayed in a web view. delegate can be nil.*/ +- (NSString *) htmlRenderingWithDelegate:(id )delegate; + +/** HTML rendering of the body of the message to be displayed in a web view.*/ +- (NSString *) htmlBodyRendering; + +/** Text rendering of the message.*/ +- (NSString *) plainTextRendering; + +/** Text rendering of the body of the message. All end of line will be removed and white spaces cleaned up. + This method can be used to generate the summary of the message.*/ +- (NSString *) plainTextBodyRendering; + +/** Text rendering of the body of the message. All end of line will be removed and white spaces cleaned up if requested. + This method can be used to generate the summary of the message.*/ +- (NSString *) plainTextBodyRenderingAndStripWhitespace:(BOOL)stripWhitespace; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOMessagePart.h b/MailCore.framework/Versions/A/Headers/MCOMessagePart.h new file mode 100644 index 0000000..5098e35 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOMessagePart.h @@ -0,0 +1,21 @@ +// +// MessagePart.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/22/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOMESSAGEPART_H + +#define MAILCORE_MCOMESSAGEPART_H + +#import + +/** Message part parsed from RFC 822 message data. */ + +@interface MCOMessagePart : MCOAbstractMessagePart + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOMultipart.h b/MailCore.framework/Versions/A/Headers/MCOMultipart.h new file mode 100644 index 0000000..1b97a13 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOMultipart.h @@ -0,0 +1,21 @@ +// +// MCOMultipart.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/22/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOMULTIPART_H + +#define MAILCORE_MCOMULTIPART_H + +#import + +/** Multipart parsed from RFC 822 message data. */ + +@interface MCOMultipart : MCOAbstractMultipart + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCONNTP.h b/MailCore.framework/Versions/A/Headers/MCONNTP.h new file mode 100644 index 0000000..980d0c3 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCONNTP.h @@ -0,0 +1,21 @@ +// +// MCONNTP.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCONNTP_H + +#define MAILCORE_MCONNTP_H + +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCONNTPDisconnectOperation.h b/MailCore.framework/Versions/A/Headers/MCONNTPDisconnectOperation.h new file mode 100644 index 0000000..7d8986b --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCONNTPDisconnectOperation.h @@ -0,0 +1,21 @@ +// +// MCONNTPDisconnectOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCONNTPDICONNECTOPERATION_H + +#define MAILCORE_MCONNTPDICONNECTOPERATION_H + +#import +#import + +/* The class is used to perform a disconnect operation. */ +@interface MCONNTPDisconnectOperation : NSObject + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCONNTPFetchArticleOperation.h b/MailCore.framework/Versions/A/Headers/MCONNTPFetchArticleOperation.h new file mode 100644 index 0000000..b8bffcb --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCONNTPFetchArticleOperation.h @@ -0,0 +1,39 @@ +// +// MCONNTPFetchArticleOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCONNTPFETCHARTICLEOPERATION_H + +#define MAILCORE_MCONNTPFETCHARTICLEOPERATION_H + +#import +#import + +/** Fetch a message from NNTP3 */ + +typedef void (^MCONNTPOperationProgressBlock)(unsigned int current, unsigned int maximum); + +@interface MCONNTPFetchArticleOperation : MCONNTPOperation + +/** This block will be called as data is downloaded from the network */ +@property (nonatomic, copy) MCONNTPOperationProgressBlock progress; + +/** + Starts the asynchronous fetch operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `data` will contain the message data + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in MCOConstants.h, `data` will be nil + */ +- (void) start:(void (^)(NSError * error, NSData * messageData))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCONNTPFetchArticlesOperation.h b/MailCore.framework/Versions/A/Headers/MCONNTPFetchArticlesOperation.h new file mode 100644 index 0000000..35a0889 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCONNTPFetchArticlesOperation.h @@ -0,0 +1,35 @@ +// +// MCONNTPFetchArticlesOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCONNTPFETCHARTICLESOPERATION_H + +#define MAILCORE_MCONNTPFETCHARTICLESOPERATION_H + +#import +#import + +@class MCOIndexSet; + +/** This is an asynchronous operation that will fetch the list of a messages on the NNTP server. */ +@interface MCONNTPFetchArticlesOperation : MCONNTPOperation + +/** + Starts the asynchronous fetch operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `articles` will be an index set of article numbers. + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in MCOConstants.h, `messages` will be null + */ +- (void) start:(void (^)(NSError * error, MCOIndexSet * articles))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCONNTPFetchHeaderOperation.h b/MailCore.framework/Versions/A/Headers/MCONNTPFetchHeaderOperation.h new file mode 100644 index 0000000..63ce767 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCONNTPFetchHeaderOperation.h @@ -0,0 +1,39 @@ +// +// MCONNTPFetchHeaderOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCONNTPFETCHHEADEROPERATION_H + +#define MAILCORE_MCONNTPFETCHHEADEROPERATION_H + +#import +#import + +/** + This is an asynchronous operation that will fetch the header of a message. + @See MCONNTPSession + */ + +@class MCOMessageHeader; + +@interface MCONNTPFetchHeaderOperation : MCONNTPOperation + +/** + Starts the asynchronous fetch operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `header` will contain the message header + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in MCOConstants.h, `header` will be null + */ +- (void) start:(void (^)(NSError * error, MCOMessageHeader * header))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCONNTPGroupInfo.h b/MailCore.framework/Versions/A/Headers/MCONNTPGroupInfo.h new file mode 100644 index 0000000..e34445a --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCONNTPGroupInfo.h @@ -0,0 +1,27 @@ +// +// MCONNTPGroupInfo.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCONNTPGROUPINFO_H + +#define MAILCORE_MCONNTPGROUPINFO_H + +#import + +/** This is information of a message fetched by MCONNTPListNewsgroupsOperation.*/ + +@interface MCONNTPGroupInfo : NSObject + +/** The name of the news group. */ +@property (nonatomic, copy) NSString *name; + +/** The number of messages in the news group. */ +@property (nonatomic, assign) unsigned int messageCount; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCONNTPListNewsgroupsOperation.h b/MailCore.framework/Versions/A/Headers/MCONNTPListNewsgroupsOperation.h new file mode 100644 index 0000000..ea702b7 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCONNTPListNewsgroupsOperation.h @@ -0,0 +1,32 @@ +// +// MCONNTPListNewsgroupsOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCONNTPLISTNEWSGROUPSOPERATION_H + +#define MAILCORE_MCONNTPLISTNEWSGROUPSOPERATION_H + +#import +#import + +@interface MCONNTPListNewsgroupsOperation : MCONNTPOperation + +/** + Starts the asynchronous fetch operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `messages` will be an array of MCONNTPGroupInfo + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in MCOConstants.h, `messages` will be null + */ +- (void) start:(void (^)(NSError * error, NSArray * /* MCONNTPGroupInfo */ messages))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCONNTPOperation.h b/MailCore.framework/Versions/A/Headers/MCONNTPOperation.h new file mode 100644 index 0000000..9d4e2fc --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCONNTPOperation.h @@ -0,0 +1,37 @@ +// +// MCONNTPOperation.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCONNTPOPERATION_H + +#define MAILCORE_MCONNTPOPERATION_H + +#import +#import + +/** + This is a generic asynchronous NNTP3 operation. + @see MCONNTPSession + */ + +@interface MCONNTPOperation : MCOOperation + +/** + 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/MailCore.framework/Versions/A/Headers/MCONNTPSession.h b/MailCore.framework/Versions/A/Headers/MCONNTPSession.h new file mode 100644 index 0000000..6712d9e --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCONNTPSession.h @@ -0,0 +1,137 @@ +// +// MCONNTPSession.h +// mailcore2 +// +// Created by Robert Widmann on 8/13/14. +// Copyright (c) 2014 MailCore. All rights reserved. +// + +#import + +#ifndef MAILCORE_MCONNTPSESSION_H + +#define MAILCORE_MCONNTPSESSION_H + +#import + +#import + +@class MCONNTPFetchArticlesOperation; +@class MCONNTPFetchHeaderOperation; +@class MCONNTPFetchArticleOperation; +@class MCONNTPListNewsgroupsOperation; +@class MCONNTPOperation; + +/** This class implements asynchronous access to the NNTP protocol.*/ + +@interface MCONNTPSession : NSObject + +/** This is the hostname of the NNTP server to connect to.*/ +@property (nonatomic, copy) NSString * hostname; + +/** This is the port of the NNTP server to connect to.*/ +@property (nonatomic, assign) unsigned int port; + +/** This is the username of the account.*/ +@property (nonatomic, copy) NSString * username; + +/** This is the password of the account.*/ +@property (nonatomic, copy) NSString * password; + +/** This is the encryption type to use. + See MCOConnectionType for more information.*/ +@property (nonatomic, assign) MCOConnectionType connectionType; + +/** This is the timeout of the connection.*/ +@property (nonatomic, assign) NSTimeInterval timeout; + +/** When set to YES, the connection will fail if the certificate is incorrect.*/ +@property (nonatomic, assign, getter=isCheckCertificateEnabled) BOOL checkCertificateEnabled; + +/** + Sets logger callback. The network traffic will be sent to this block. + + [session setConnectionLogger:^(void * connectionID, MCOConnectionLogType type, NSData * data) { + ... + }]; + */ +@property (nonatomic, copy) MCOConnectionLogger connectionLogger; + +/** This property provides some hints to MCONNTPSession about where it's called from. + It will make MCONNTPSession safe. It will also set all the callbacks of operations to run on this given queue. + Defaults to the main queue. + This property should be used only if there's performance issue using MCONNTPSession in the main thread. */ +@property (nonatomic, assign) dispatch_queue_t dispatchQueue; + +/** @name Operations */ + +/** + Returns an operation that will fetch the list of article numbers. + + MCONNTPFetchArticlesOperation * op = [session fetchArticlesOperation]; + [op start:^(NSError * error, MCOIndexSet * articles) { + }]; + */ +- (MCONNTPFetchArticlesOperation *) fetchArticlesOperation:(NSString *)group; + +/** + Returns an operation that will fetch the header of the given message. + + MCONNTPFetchHeaderOperation * op = [session fetchHeaderOperationWithIndex:idx inGroup:@"Group"]; + [op start:^(NSError * error, MCOMessageHeader * header) { + // header is the parsed header of the message. + }]; + */ +- (MCONNTPFetchHeaderOperation *) fetchHeaderOperationWithIndex:(unsigned int)index inGroup:(NSString *)group; + +/** + Returns an operation that will fetch the content of the given message. + + MCONNTPFetchArticleOperation * op = [session fetchArticleOperationWithIndex:idx inGroup:@"Group"]; + [op start:^(NSError * error, NSData * messageData) { + // messageData is the RFC 822 formatted message data. + }]; + */ +- (MCONNTPFetchArticleOperation *) fetchArticleOperationWithIndex:(unsigned int)index inGroup:(NSString *)group; + +/** + Returns an operation that will list all available newsgroups. + + MCONNTPListNewsgroupsOperation * op = [session listAllNewsgroupsOperation]; + [op start:^(NSError * error, NSArray * subscribedGroups) { + }]; + */ +- (MCONNTPListNewsgroupsOperation *) listAllNewsgroupsOperation; + +/** + Returns an operation that will list all newsgroups subscribed to by the user. + + MCONNTPListNewsgroupsOperation * op = [session listSubscribedNewsgroupsOperation]; + [op start:^(NSError * error, NSArray * subscribedGroups) { + }]; + */ +- (MCONNTPListNewsgroupsOperation *) listSubscribedNewsgroupsOperation; + +/** + Returns an operation that will disconnect the session. + + MCONNTPOperation * op = [session disconnectOperation]; + [op start:^(NSError * error) { + ... + }]; + */ +- (MCONNTPOperation *) disconnectOperation; + +/** + Returns an operation that will check whether the NNTP account is valid. + + MCONNTPOperation * op = [session checkAccountOperation]; + [op start:^(NSError * error) { + ... + }]; + */ +- (MCONNTPOperation *) checkAccountOperation; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCONetService.h b/MailCore.framework/Versions/A/Headers/MCONetService.h new file mode 100644 index 0000000..eb198e5 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCONetService.h @@ -0,0 +1,41 @@ +// +// MCONetService.h +// mailcore2 +// +// Created by Robert Widmann on 4/28/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#import +#import + +/** + This class provides a specific way to access a given service +*/ + +@interface MCONetService : NSObject + +/** + The hostname of the server. [MCONetService hostnameWithEmail:] is recommended + instead as it can handle services with custom domains +*/ +@property (nonatomic, copy) NSString * hostname; + +/** The port number of the service */ +@property (nonatomic, assign) unsigned int port; + +/** What kind of connection type is supported, like SSL, Start TLS, Plain etc. */ +@property (nonatomic, assign) MCOConnectionType connectionType; + ++ (MCONetService *) serviceWithInfo:(NSDictionary *)info; + +- (id) initWithInfo:(NSDictionary *)info; +- (NSDictionary *) info; + +/** + If the service uses a custom domain this will return the proper hostname based + off the email address +*/ +- (NSString *) hostnameWithEmail:(NSString *)email; + +@end diff --git a/MailCore.framework/Versions/A/Headers/MCOObjectWrapper.h b/MailCore.framework/Versions/A/Headers/MCOObjectWrapper.h new file mode 100644 index 0000000..67cb45e --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOObjectWrapper.h @@ -0,0 +1,31 @@ +// +// MCOObjectWrapper.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/25/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOOBJECTWRAPPER_H + +#define MAILCORE_MCOOBJECTWRAPPER_H + +#import + +#ifdef __cplusplus +namespace mailcore { + class Object; +} +#endif + +@interface MCOObjectWrapper : NSObject + +#ifdef __cplusplus +@property (nonatomic, assign) mailcore::Object * object; + ++ (MCOObjectWrapper *) objectWrapperWithObject:(mailcore::Object *)object; +#endif + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOOperation.h b/MailCore.framework/Versions/A/Headers/MCOOperation.h new file mode 100644 index 0000000..e3aa758 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOOperation.h @@ -0,0 +1,41 @@ +// +// MCOOperation.h +// mailcore2 +// +// Created by Matt Ronge on 01/31/13. +// Copyright (c) 2013 __MyCompanyName__. All rights reserved. +// + +#ifndef MAILCORE_MCOOPERATION_H + +#define MAILCORE_MCOOPERATION_H + +#import + +@interface MCOOperation : NSObject + +/** Returns whether the operation is cancelled.*/ +@property (readonly) BOOL isCancelled; + +/** Returns whether the operation should run even if it's cancelled.*/ +@property (nonatomic, assign) BOOL shouldRunWhenCancelled; + +/** The queue this operation dispatches the callback on. Defaults to the main queue. + This property should be used only if there's performance issue creating or calling the callback + in the main thread. */ +#if OS_OBJECT_USE_OBJC +@property (nonatomic, retain) dispatch_queue_t callbackDispatchQueue; +#else +@property (nonatomic, assign) dispatch_queue_t callbackDispatchQueue; +#endif + +/** This methods is called on the main thread when the asynchronous operation is finished. + Needs to be overriden by subclasses.*/ +- (void) operationCompleted; + +/** Cancel the operation.*/ +- (void) cancel; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOPOP.h b/MailCore.framework/Versions/A/Headers/MCOPOP.h new file mode 100644 index 0000000..5a75ff4 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOPOP.h @@ -0,0 +1,20 @@ +// +// MCOPOP.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/30/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOPOP_H + +#define MAILCORE_MCOPOP_H + +#import +#import +#import +#import +#import +#import + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOPOPFetchHeaderOperation.h b/MailCore.framework/Versions/A/Headers/MCOPOPFetchHeaderOperation.h new file mode 100644 index 0000000..d4735ce --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOPOPFetchHeaderOperation.h @@ -0,0 +1,39 @@ +// +// MCOFetchHeaderOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/29/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOPOPFETCHHEADEROPERATION_H + +#define MAILCORE_MCOPOPFETCHHEADEROPERATION_H + +#import +#import + +/** + This is an asynchronous operation that will fetch the header of a message. + @See MCOPOPSession +*/ + +@class MCOMessageHeader; + +@interface MCOPOPFetchHeaderOperation : MCOPOPOperation + +/** + Starts the asynchronous fetch operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `header` will contain the message header + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in MCOConstants.h, `header` will be null +*/ +- (void) start:(void (^)(NSError * error, MCOMessageHeader * header))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOPOPFetchMessageOperation.h b/MailCore.framework/Versions/A/Headers/MCOPOPFetchMessageOperation.h new file mode 100644 index 0000000..b97825c --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOPOPFetchMessageOperation.h @@ -0,0 +1,39 @@ +// +// MCOFetchMessageOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/29/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOPOPFETCHMESSAGEOPERATION_H + +#define MAILCORE_MCOPOPFETCHMESSAGEOPERATION_H + +#import +#import + +/** Fetch a message from POP3 */ + +typedef void (^MCOPOPOperationProgressBlock)(unsigned int current, unsigned int maximum); + +@interface MCOPOPFetchMessageOperation : MCOPOPOperation + +/** This block will be called as data is downloaded from the network */ +@property (nonatomic, copy) MCOPOPOperationProgressBlock progress; + +/** + Starts the asynchronous fetch operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `data` will contain the message data + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in MCOConstants.h, `data` will be nil +*/ +- (void) start:(void (^)(NSError * error, NSData * messageData))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOPOPFetchMessagesOperation.h b/MailCore.framework/Versions/A/Headers/MCOPOPFetchMessagesOperation.h new file mode 100644 index 0000000..aef4908 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOPOPFetchMessagesOperation.h @@ -0,0 +1,34 @@ +// +// MCOPOPFetchMessagesOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/29/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOPOPFETCHMESSAGESOPERATION_H + +#define MAILCORE_MCOPOPFETCHMESSAGESOPERATION_H + +#import +#import + +/** This is an asynchronous operation that will fetch the list of a messages on the POP3 account. */ + +@interface MCOPOPFetchMessagesOperation : MCOPOPOperation + +/** + Starts the asynchronous fetch operation. + + @param completionBlock Called when the operation is finished. + + - On success `error` will be nil and `messages` will be an array of MCOPOPMessageInfo + + - On failure, `error` will be set with `MCOErrorDomain` as domain and an + error code available in MCOConstants.h, `messages` will be null +*/ +- (void) start:(void (^)(NSError * error, NSArray * /* MCOPOPMessageInfo */ messages))completionBlock; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOPOPMessageInfo.h b/MailCore.framework/Versions/A/Headers/MCOPOPMessageInfo.h new file mode 100644 index 0000000..416747f --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOPOPMessageInfo.h @@ -0,0 +1,31 @@ +// +// MCOPOPMessageInfo.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/30/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOPOPMESSAGEINFO_H + +#define MAILCORE_MCOPOPMESSAGEINFO_H + +#import + +/** This is information of a message fetched by MCOPOPFetchMessagesOperation.*/ + +@interface MCOPOPMessageInfo : NSObject + +/** This is the index of a given message.*/ +@property (nonatomic, assign) unsigned int index; + +/** This is the size of the given message.*/ +@property (nonatomic, assign) unsigned int size; + +/** This is the unique identifier of the message. + It can be used as a cache identifier.*/ +@property (nonatomic, copy) NSString * uid; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOPOPNoopOperation.h b/MailCore.framework/Versions/A/Headers/MCOPOPNoopOperation.h new file mode 100644 index 0000000..015a168 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOPOPNoopOperation.h @@ -0,0 +1,34 @@ +// +// MCOPOPNoopOperation.h +// mailcore2 +// +// Created by Robert Widmann on 9/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOPOPNOOPOPERATION_H + +#define MAILCORE_MCOPOPNOOPOPERATION_H + +#import +#import + +/** This is an asynchronous operation that will perform a No-Op on the POP3 account. */ + +@interface MCOPOPNoopOperation : MCOPOPOperation + +/** + Starts the asynchronous noop 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/MailCore.framework/Versions/A/Headers/MCOPOPOperation.h b/MailCore.framework/Versions/A/Headers/MCOPOPOperation.h new file mode 100644 index 0000000..30180cc --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOPOPOperation.h @@ -0,0 +1,37 @@ +// +// MCODeleteMessagesOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/29/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOPOPOPERATION_H + +#define MAILCORE_MCOPOPOPERATION_H + +#import +#import + +/** + This is a generic asynchronous POP3 operation. + @see MCOPOPSession +*/ + +@interface MCOPOPOperation : MCOOperation + +/** + 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/MailCore.framework/Versions/A/Headers/MCOPOPSession.h b/MailCore.framework/Versions/A/Headers/MCOPOPSession.h new file mode 100644 index 0000000..260fe5d --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOPOPSession.h @@ -0,0 +1,155 @@ +// +// MCOPOPSession.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/29/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOPOPSESSION_H + +#define MAILCORE_MCOPOPSESSION_H + +#import + +#import + +@class MCOPOPFetchMessagesOperation; +@class MCOPOPFetchHeaderOperation; +@class MCOPOPFetchMessageOperation; +@class MCOPOPOperation; +@class MCOIndexSet; + +/** This class implements asynchronous access to the POP3 protocol.*/ + +@interface MCOPOPSession : NSObject + +/** This is the hostname of the POP3 server to connect to.*/ +@property (nonatomic, copy) NSString * hostname; + +/** This is the port of the POP3 server to connect to.*/ +@property (nonatomic, assign) unsigned int port; + +/** This is the username of the account.*/ +@property (nonatomic, copy) NSString * username; + +/** This is the password of the account.*/ +@property (nonatomic, copy) NSString * password; + +/** + This is the authentication type to use to connect. + `MCOAuthTypeSASLNone` means that it uses the clear-text is used (and is the default). + @warning *Important*: Over an encrypted connection like TLS, the password will still be secure +*/ +@property (nonatomic, assign) MCOAuthType authType; + +/** This is the encryption type to use. +See MCOConnectionType for more information.*/ +@property (nonatomic, assign) MCOConnectionType connectionType; + +/** This is the timeout of the connection.*/ +@property (nonatomic, assign) NSTimeInterval timeout; + +/** When set to YES, the connection will fail if the certificate is incorrect.*/ +@property (nonatomic, assign, getter=isCheckCertificateEnabled) BOOL checkCertificateEnabled; + +/** + Sets logger callback. The network traffic will be sent to this block. + + [session setConnectionLogger:^(void * connectionID, MCOConnectionLogType type, NSData * data) { + ... + }]; + */ +@property (nonatomic, copy) MCOConnectionLogger connectionLogger; + +/** This property provides some hints to MCOPOPSession about where it's called from. + It will make MCOPOPSession safe. It will also set all the callbacks of operations to run on this given queue. + Defaults to the main queue. + This property should be used only if there's performance issue using MCOPOPSession in the main thread. */ +#if OS_OBJECT_USE_OBJC +@property (nonatomic, retain) dispatch_queue_t dispatchQueue; +#else +@property (nonatomic, assign) dispatch_queue_t dispatchQueue; +#endif + +/** @name Operations */ + +/** + Returns an operation that will fetch the list of messages. + + MCOPOPFetchMessagesOperation * op = [session fetchMessagesOperation]; + [op start:^(NSError * error, NSArray * messages) { + // messages is an array of MCOPOPMessageInfo + // [info index] can be used as reference for a given message in the other operations. + }]; +*/ +- (MCOPOPFetchMessagesOperation *) fetchMessagesOperation; + +/** + Returns an operation that will fetch the header of the given message. + + MCOPOPFetchHeaderOperation * op = [session fetchHeaderOperationWithIndex:idx]; + [op start:^(NSError * error, MCOMessageHeader * header) { + // header is the parsed header of the message. + }]; +*/ +- (MCOPOPFetchHeaderOperation *) fetchHeaderOperationWithIndex:(unsigned int)index; + +/** + Returns an operation that will fetch the content of the given message. + + MCOPOPFetchMessageOperation * op = [session fetchMessageOperationWithIndex:idx]; + [op start:^(NSError * error, NSData * messageData) { + // messageData is the RFC 822 formatted message data. + }]; +*/ +- (MCOPOPFetchMessageOperation *) fetchMessageOperationWithIndex:(unsigned int)index; + +/** + Returns an operation that will delete the given messages. + Will disconnect when finished. + + MCOIndexSet * indexes = [MCOIndexSet indexSet]; + [indexes addIndex:1]; + [indexes addIndex:2]; + [indexes addIndex:3]; + MCOPOPOperation * op = [session deleteMessagesOperationWithIndexes:indexes]; + [op start:^(NSError * error) { + ... + }]; +*/ +- (MCOPOPOperation *) deleteMessagesOperationWithIndexes:(MCOIndexSet *)indexes; + +/** + Returns an operation that will disconnect the session. + + MCOPOPOperation * op = [session disconnectOperation]; + [op start:^(NSError * error) { + ... + }]; + */ +- (MCOPOPOperation *) disconnectOperation; + +/** + Returns an operation that will check whether the POP account is valid. + + MCOPOPOperation * op = [session checkAccountOperation]; + [op start:^(NSError * error) { + ... + }]; +*/ +- (MCOPOPOperation *) checkAccountOperation; + +/** + Returns an operation that will perform a No-Op operation. + + MCOPOPOperation * op = [session noopOperation]; + [op start:^(NSError * error) { + ... + }]; + */ +- (MCOPOPOperation *) noopOperation; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOProvider.h b/MailCore.framework/Versions/A/Headers/MCOProvider.h new file mode 100644 index 0000000..09f2cb0 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOProvider.h @@ -0,0 +1,17 @@ +// +// MCOPROVIDER.h +// mailcore2 +// +// Created by Pushkar Singh on 5/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef _MAILCORE__MCOPROVIDER_h +#define _MAILCORE__MCOPROVIDER_h + + +#import +#import +#import + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCORFC822.h b/MailCore.framework/Versions/A/Headers/MCORFC822.h new file mode 100644 index 0000000..ce894aa --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCORFC822.h @@ -0,0 +1,19 @@ +// +// MCORFC822.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/22/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCORFC822_H + +#define MAILCORE_MCORFC822_H + +#import +#import +#import +#import +#import + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCORange.h b/MailCore.framework/Versions/A/Headers/MCORange.h new file mode 100644 index 0000000..fa6d4ae --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCORange.h @@ -0,0 +1,77 @@ +// +// MCORange.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCORANGE_H + +#define MAILCORE_MCORANGE_H + +#import + +#ifdef __cplusplus +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +@class MCOIndexSet; + +typedef struct { + /** first integer of the range.*/ + uint64_t location; + + /** length of the range.*/ + uint64_t length; +} MCORange; + +/** Constants for an emtpy range.*/ +extern MCORange MCORangeEmpty; + +/** Returns a new range given a location and length.*/ +MCORange MCORangeMake(uint64_t location, uint64_t length); + +/** Returns an index set that is the result of sustracting a range from a range.*/ +MCOIndexSet * MCORangeRemoveRange(MCORange range1, MCORange range2); + +/** Returns an index set that is the result of the union a range from a range.*/ +MCOIndexSet * MCORangeUnion(MCORange range1, MCORange range2); + +#ifdef __cplusplus + +/** Returns a C++ range from an Objective-C range.*/ +mailcore::Range MCORangeToMCRange(MCORange range); + +/** Returns an Objective-C range from a C++ range.*/ +MCORange MCORangeWithMCRange(mailcore::Range range); + +#endif + +/** Returns the intersection of two ranges.*/ +MCORange MCORangeIntersection(MCORange range1, MCORange range2); + +/** Returns YES if two given ranges have an intersection.*/ +BOOL MCORangeHasIntersection(MCORange range1, MCORange range2); + +/** Returns left bound of a range.*/ +uint64_t MCORangeLeftBound(MCORange range); + +/** Returns right bound of a range.*/ +uint64_t MCORangeRightBound(MCORange range); + +/** Returns a serializable form (NSString) of a range */ +NSString * MCORangeToString(MCORange range); + +/** Create a range from a serializable form (NSString). */ +MCORange MCORangeFromString(NSString * rangeString); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOSMTP.h b/MailCore.framework/Versions/A/Headers/MCOSMTP.h new file mode 100644 index 0000000..49d01de --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOSMTP.h @@ -0,0 +1,17 @@ +// +// MCOSMTP.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/29/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOSMTP_H + +#define MAILCORE_MCOSMTP_H + +#import +#import +#import + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOSMTPOperation.h b/MailCore.framework/Versions/A/Headers/MCOSMTPOperation.h new file mode 100644 index 0000000..7b92148 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOSMTPOperation.h @@ -0,0 +1,33 @@ +// +// MCOSMTPCheckAccountOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/29/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOSMTPOPERATION_H + +#define MAILCORE_MCOSMTPOPERATION_H + +#import + +/** This is an asynchronous SMTP operation, used for sending messages. */ + +@interface MCOSMTPOperation : MCOOperation + +/** + 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/MailCore.framework/Versions/A/Headers/MCOSMTPSendOperation.h b/MailCore.framework/Versions/A/Headers/MCOSMTPSendOperation.h new file mode 100644 index 0000000..82b238c --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOSMTPSendOperation.h @@ -0,0 +1,38 @@ +// +// MCOSMTPSendOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/29/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOSMTPSENDOPERATION_H + +#define MAILCORE_MCOSMTPSENDOPERATION_H + +#import + +/** This is an asynchronous operation that will send a message through SMTP. */ + +typedef void (^MCOSMTPOperationProgressBlock)(unsigned int current, unsigned int maximum); + +@interface MCOSMTPSendOperation : MCOSMTPOperation + +/** This block will be called as the message is sent */ +@property (nonatomic, copy) MCOSMTPOperationProgressBlock progress; + +/* + 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/MailCore.framework/Versions/A/Headers/MCOSMTPSession.h b/MailCore.framework/Versions/A/Headers/MCOSMTPSession.h new file mode 100644 index 0000000..286cd7c --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOSMTPSession.h @@ -0,0 +1,145 @@ +// +// MCOSMTPSession.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/29/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOSMTPSESSION_H + +#define MAILCORE_MCOSMTPSESSION_H + +#import + +#import + +/** + This class is used to create an SMTP connection and send messages + + After calling a method that returns an operation you must call start: on the instance + to begin the operation. +*/ + +@class MCOSMTPSendOperation; +@class MCOSMTPOperation; +@class MCOAddress; + +@interface MCOSMTPSession : NSObject + +/** This is the hostname of the SMTP server to connect to. */ +@property (nonatomic, copy) NSString * hostname; + +/** This is the port of the SMTP server to connect to. */ +@property (nonatomic, assign) unsigned int port; + +/** This is the username of the account. */ +@property (nonatomic, copy) NSString * username; + +/** This is the password of the account. */ +@property (nonatomic, copy) NSString * password; + +/** This is the OAuth2 token. */ +@property (nonatomic, copy) NSString *OAuth2Token; + +/** + This is the authentication type to use to connect. + `MCOAuthTypeSASLNone` means that it uses the clear-text is used (and is the default). + @warning *Important*: Over an encrypted connection like TLS, the password will still be secure +*/ +@property (nonatomic, assign) MCOAuthType authType; + +/** + This is the encryption type to use. + See MCOConnectionType for more information. +*/ +@property (nonatomic, assign) MCOConnectionType connectionType; + +/** This is the timeout of the connection. */ +@property (nonatomic, assign) NSTimeInterval timeout; + +/** When set to YES, the connection will fail if the certificate is incorrect. */ +@property (nonatomic, assign, getter=isCheckCertificateEnabled) BOOL checkCertificateEnabled; + +/** + If set to YES, when sending the EHLO or HELO command, use IP address instead of hostname. + Default is NO. +*/ +@property (nonatomic, assign, getter=isUseHeloIPEnabled) BOOL useHeloIPEnabled; + +/** + Sets logger callback. The network traffic will be sent to this block. + + [session setConnectionLogger:^(void * connectionID, MCOConnectionLogType type, NSData * data) { + ... + }]; + */ +@property (nonatomic, copy) MCOConnectionLogger connectionLogger; + +/** This property provides some hints to MCOSMTPSession about where it's called from. + It will make MCOSMTPSession safe. It will also set all the callbacks of operations to run on this given queue. + Defaults to the main queue. + This property should be used only if there's performance issue using MCOSMTPSession in the main thread. */ +#if OS_OBJECT_USE_OBJC +@property (nonatomic, retain) dispatch_queue_t dispatchQueue; +#else +@property (nonatomic, assign) dispatch_queue_t dispatchQueue; +#endif + +/** @name Operations */ + +/** + 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. + + Generate RFC 822 data using MCOMessageBuilder + + MCOSMTPOperation * op = [session sendOperationWithData:rfc822Data]; + [op start:^(NSError * error) { + ... + }]; +*/ +- (MCOSMTPSendOperation *) sendOperationWithData:(NSData *)messageData; + +/** + Returns an operation that will send the given message through SMTP. + It will use the sender and recipient set from the parameters. + It will also filter out Bcc from the content of the message. + + Generate RFC 822 data using MCOMessageBuilder + + MCOSMTPOperation * op = [session sendOperationWithData:rfc822Data + from:[MCOAddress addressWithMailbox:@"hoa@etpan.org"] + recipients:[NSArray arrayWithObject:[MCOAddress addressWithMailbox:@"laura@etpan.org"]]]; + [op start:^(NSError * error) { + ... + }]; + */ +- (MCOSMTPSendOperation *) sendOperationWithData:(NSData *)messageData + from:(MCOAddress *)from + recipients:(NSArray *)recipients; + +/** + Returns an operation that will check whether the SMTP account is valid. + + MCOSMTPOperation * op = [session checkAccountOperationWithFrom:[MCOAddress addressWithMailbox:@"hoa@etpan.org"]]; + [op start:^(NSError * error) { + ... + }]; +*/ +- (MCOSMTPOperation *) checkAccountOperationWithFrom:(MCOAddress *)from; + +/** + Returns an operation that will perform a No-Op. + + MCOSMTPOperation * op = [session noopOperation]; + [op start:^(NSError * error) { + ... + }]; + */ +- (MCOSMTPOperation *) noopOperation; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOUtils.h b/MailCore.framework/Versions/A/Headers/MCOUtils.h new file mode 100644 index 0000000..30e83a7 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOUtils.h @@ -0,0 +1,28 @@ +// +// MCOUtils.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/22/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOUTILS_H + +#define MAILCORE_MCOUTILS_H + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCObjC.h b/MailCore.framework/Versions/A/Headers/MCObjC.h new file mode 100644 index 0000000..68d35f1 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCObjC.h @@ -0,0 +1,26 @@ +// +// MCObjC.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/27/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCOBJC_H + +#define MAILCORE_MCOBJC_H + +#ifdef __OBJC__ + +#import +#import +#import +#import +#import +#import +#import +#import + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCObject.h b/MailCore.framework/Versions/A/Headers/MCObject.h new file mode 100644 index 0000000..caf8ab3 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCObject.h @@ -0,0 +1,71 @@ +#ifndef MAILCORE_MCOBJECT_H + +#define MAILCORE_MCOBJECT_H + +#include +#if __APPLE__ +#include +#endif + +#ifdef __cplusplus + +#define MC_PROPERTY(mcType, setter, getter) \ + virtual void setter(mcType * getter); \ + virtual mcType * getter(); + +namespace mailcore { + + extern bool zombieEnabled; + + class String; + class HashMap; + + class Object { + public: + Object(); + virtual ~Object(); + + virtual int retainCount(); + virtual Object * retain(); + virtual void release(); + virtual Object * autorelease(); + virtual String * description(); + virtual String * className(); + + virtual bool isEqual(Object * otherObject); + virtual unsigned int hash(); + + // optional + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + typedef void (Object::*Method) (void *); + virtual void performMethod(Method method, void * context); + virtual void performMethodOnMainThread(Method method, void * context, bool waitUntilDone = false); + virtual void performMethodAfterDelay(Method method, void * context, double delay); +#if __APPLE__ + virtual void performMethodOnDispatchQueue(Method method, void * context, void * targetDispatchQueue, bool waitUntilDone = false); + virtual void performMethodOnDispatchQueueAfterDelay(Method method, void * context, void * targetDispatchQueue, double delay); + virtual void cancelDelayedPerformMethodOnDispatchQueue(Method method, void * context, void * targetDispatchQueue); +#endif + virtual void cancelDelayedPerformMethod(Method method, void * context); + + // serialization utils + static void registerObjectConstructor(const char * className, void * (* objectConstructor)(void)); + static Object * objectWithSerializable(HashMap * serializable); + + public: // private + + private: + pthread_mutex_t mLock; + int mCounter; + void init(); + static void initObjectConstructors(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOperation.h b/MailCore.framework/Versions/A/Headers/MCOperation.h new file mode 100644 index 0000000..b9d5f95 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOperation.h @@ -0,0 +1,59 @@ +#ifndef MAILCORE_MCOPERATION_H + +#define MAILCORE_MCOPERATION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class OperationCallback; + + class Operation : public Object { + public: + Operation(); + virtual ~Operation(); + + virtual void setCallback(OperationCallback * callback); + virtual OperationCallback * callback(); + + virtual void cancel(); + virtual bool isCancelled(); + + // Will be called on main thread. + virtual void beforeMain(); + + virtual void main(); + + // Will be called on main thread. + virtual void afterMain(); + + virtual void start(); + +#ifdef __APPLE__ + virtual void setCallbackDispatchQueue(dispatch_queue_t callbackDispatchQueue); + virtual dispatch_queue_t callbackDispatchQueue(); +#endif + void performMethodOnCallbackThread(Method method, void * context, bool waitUntilDone = false); + + virtual bool shouldRunWhenCancelled(); + virtual void setShouldRunWhenCancelled(bool shouldRunWhenCancelled); + + private: + OperationCallback * mCallback; + bool mCancelled; + bool mShouldRunWhenCancelled; + pthread_mutex_t mLock; +#ifdef __APPLE__ + dispatch_queue_t mCallbackDispatchQueue; +#endif + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOperationCallback.h b/MailCore.framework/Versions/A/Headers/MCOperationCallback.h new file mode 100644 index 0000000..b8bea4d --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOperationCallback.h @@ -0,0 +1,20 @@ +#ifndef MAILCORE_MCOPERATIONCALLBACK_H + +#define MAILCORE_MCOPERATIONCALLBACK_H + +#ifdef __cplusplus + +namespace mailcore { + + class Operation; + + class OperationCallback { + public: + virtual void operationFinished(Operation * op) {} + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCOperationQueue.h b/MailCore.framework/Versions/A/Headers/MCOperationQueue.h new file mode 100644 index 0000000..119befc --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCOperationQueue.h @@ -0,0 +1,68 @@ +#ifndef MAILCORE_MCOPERATIONQUEUE_H + +#define MAILCORE_MCOPERATIONQUEUE_H + +#include +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Operation; + class OperationQueueCallback; + class Array; + + class OperationQueue : public Object { + public: + OperationQueue(); + virtual ~OperationQueue(); + + virtual void addOperation(Operation * op); + virtual void cancelAllOperations(); + + virtual unsigned int count(); + + virtual void setCallback(OperationQueueCallback * callback); + virtual OperationQueueCallback * callback(); + +#ifdef __APPLE__ + virtual void setDispatchQueue(dispatch_queue_t dispatchQueue); + virtual dispatch_queue_t dispatchQueue(); +#endif + + private: + Array * mOperations; + pthread_t mThreadID; + bool mStarted; + struct mailsem * mOperationSem; + struct mailsem * mStartSem; + struct mailsem * mStopSem; + pthread_mutex_t mLock; + bool mWaiting; + struct mailsem * mWaitingFinishedSem; + bool mQuitting; + OperationQueueCallback * mCallback; +#if __APPLE__ + dispatch_queue_t mDispatchQueue; +#endif + bool _pendingCheckRunning; + + void startThread(); + static void runOperationsOnThread(OperationQueue * queue); + void runOperations(); + void beforeMain(Operation * op); + void callbackOnMainThread(Operation * op); + void checkRunningOnMainThread(void * context); + void checkRunningAfterDelay(void * context); + void stoppedOnMainThread(void * context); + void performOnCallbackThread(Operation * op, Method method, void * context, bool waitUntilDone); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCPOP.h b/MailCore.framework/Versions/A/Headers/MCPOP.h new file mode 100644 index 0000000..db17430 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCPOP.h @@ -0,0 +1,9 @@ +#ifndef MAILCORE_MCPOP_H + +#define MAILCORE_MCPOP_H + +#include +#include +#include + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCPOPAsyncSession.h b/MailCore.framework/Versions/A/Headers/MCPOPAsyncSession.h new file mode 100644 index 0000000..dae0f7b --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCPOPAsyncSession.h @@ -0,0 +1,98 @@ +// +// MCPopAsyncSession.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCPOPASYNCSESSION_H + +#define MAILCORE_MCPOPASYNCSESSION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class POPOperation; + class POPSession; + class POPFetchHeaderOperation; + class POPFetchMessageOperation; + class POPDeleteMessagesOperation; + class POPFetchMessagesOperation; + class POPOperationQueueCallback; + class POPConnectionLogger; + + class POPAsyncSession : public Object { + public: + POPAsyncSession(); + virtual ~POPAsyncSession(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * login); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + + virtual void setAuthType(AuthType authType); + virtual AuthType authType(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + +#ifdef __APPLE__ + virtual void setDispatchQueue(dispatch_queue_t dispatchQueue); + virtual dispatch_queue_t dispatchQueue(); +#endif + + virtual POPFetchMessagesOperation * fetchMessagesOperation(); + + virtual POPFetchHeaderOperation * fetchHeaderOperation(unsigned int index); + + virtual POPFetchMessageOperation * fetchMessageOperation(unsigned int index); + + // Will disconnect. + virtual POPOperation * deleteMessagesOperation(IndexSet * indexes); + + virtual POPOperation * disconnectOperation(); + + virtual POPOperation * checkAccountOperation(); + + virtual POPOperation * noopOperation(); + + private: + POPSession * mSession; + OperationQueue * mQueue; + POPOperationQueueCallback * mQueueCallback; + ConnectionLogger * mConnectionLogger; + pthread_mutex_t mConnectionLoggerLock; + POPConnectionLogger * mInternalLogger; + + public: // private + virtual void runOperation(POPOperation * operation); + virtual POPSession * session(); + virtual void logConnection(ConnectionLogType logType, Data * buffer); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCPOPFetchHeaderOperation.h b/MailCore.framework/Versions/A/Headers/MCPOPFetchHeaderOperation.h new file mode 100644 index 0000000..d046654 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCPOPFetchHeaderOperation.h @@ -0,0 +1,44 @@ +// +// MCPOPFetchHeaderOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCPOPFETCHHEADEROPERATION_H + +#define MAILCORE_MCPOPFETCHHEADEROPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MessageHeader; + + class POPFetchHeaderOperation : public POPOperation { + public: + POPFetchHeaderOperation(); + virtual ~POPFetchHeaderOperation(); + + virtual void setMessageIndex(unsigned int messageIndex); + virtual unsigned int messageIndex(); + + virtual MessageHeader * header(); + + public: // subclass behavior + virtual void main(); + + private: + unsigned int mMessageIndex; + MessageHeader * mHeader; + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCPOPFetchMessageOperation.h b/MailCore.framework/Versions/A/Headers/MCPOPFetchMessageOperation.h new file mode 100644 index 0000000..86d08af --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCPOPFetchMessageOperation.h @@ -0,0 +1,41 @@ +// +// MCPOPFetchMessageOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCPOPFETCHMESSAGEOPERATION_H + +#define MAILCORE_MCPOPFETCHMESSAGEOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + class POPFetchMessageOperation : public POPOperation { + public: + POPFetchMessageOperation(); + virtual ~POPFetchMessageOperation(); + + virtual void setMessageIndex(unsigned int messageIndex); + virtual unsigned int messageIndex(); + + virtual Data * data(); + + public: // subclass behavior + virtual void main(); + + private: + unsigned int mMessageIndex; + Data * mData; + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCPOPFetchMessagesOperation.h b/MailCore.framework/Versions/A/Headers/MCPOPFetchMessagesOperation.h new file mode 100644 index 0000000..eaee884 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCPOPFetchMessagesOperation.h @@ -0,0 +1,37 @@ +// +// MCPOPFetchMessagesOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCPOPFETCHMESSAGESOPERATION_H + +#define MAILCORE_MCPOPFETCHMESSAGESOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class POPFetchMessagesOperation : public POPOperation { + public: + POPFetchMessagesOperation(); + virtual ~POPFetchMessagesOperation(); + + virtual Array * /* POPMessageInfo */ messages(); + + public: // subclass behavior + virtual void main(); + + private: + Array * /* POPMessageInfo */ mMessages; + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCPOPMessageInfo.h b/MailCore.framework/Versions/A/Headers/MCPOPMessageInfo.h new file mode 100644 index 0000000..be85bc9 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCPOPMessageInfo.h @@ -0,0 +1,42 @@ +#ifndef MAILCORE_MCPOPMESSAGEINFO_H + +#define MAILCORE_MCPOPMESSAGEINFO_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class POPMessageInfo : public Object { + public: + POPMessageInfo(); + virtual ~POPMessageInfo(); + + virtual void setIndex(unsigned int index); + virtual unsigned int index(); + + virtual void setSize(unsigned int size); + virtual unsigned int size(); + + virtual void setUid(String * uid); + virtual String * uid(); + + public: // subclass behavior + POPMessageInfo(POPMessageInfo * other); + virtual String * description(); + virtual Object * copy(); + + private: + unsigned int mIndex; + unsigned int mSize; + String * mUid; + + void init(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCPOPNoopOperation.h b/MailCore.framework/Versions/A/Headers/MCPOPNoopOperation.h new file mode 100644 index 0000000..705d396 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCPOPNoopOperation.h @@ -0,0 +1,32 @@ +// +// MCPOPNoopOperation.h +// mailcore2 +// +// Created by Robert Widmann on 9/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCPOPNOOPOPERATION_H + +#define MAILCORE_MCPOPNOOPOPERATION_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class POPNoopOperation : public POPOperation { + public: + POPNoopOperation(); + virtual ~POPNoopOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCPOPOperation.h b/MailCore.framework/Versions/A/Headers/MCPOPOperation.h new file mode 100644 index 0000000..1b454e9 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCPOPOperation.h @@ -0,0 +1,53 @@ +// +// MCPOPOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCPOPOPERATION_H + +#define MAILCORE_MCPOPOPERATION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class POPAsyncSession; + class POPOperationCallback; + + class POPOperation : public Operation, public POPProgressCallback { + public: + POPOperation(); + virtual ~POPOperation(); + + virtual void setSession(POPAsyncSession * session); + virtual POPAsyncSession * session(); + + virtual void setPopCallback(POPOperationCallback * callback); + virtual POPOperationCallback * popCallback(); + + virtual void setError(ErrorCode error); + virtual ErrorCode error(); + + virtual void start(); + + private: + POPAsyncSession * mSession; + POPOperationCallback * mPopCallback; + ErrorCode mError; + private: + virtual void bodyProgress(POPSession * session, unsigned int current, unsigned int maximum); + virtual void bodyProgressOnMainThread(void * context); + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCPOPOperationCallback.h b/MailCore.framework/Versions/A/Headers/MCPOPOperationCallback.h new file mode 100644 index 0000000..ccc2168 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCPOPOperationCallback.h @@ -0,0 +1,28 @@ +// +// MCPOPOperationCallback.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/16/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCPOPOPERATIONCALLBACK_H + +#define MAILCORE_MCPOPOPERATIONCALLBACK_H + +#ifdef __cplusplus + +namespace mailcore { + + class POPOperation; + + class POPOperationCallback { + public: + virtual void bodyProgress(POPOperation * session, unsigned int current, unsigned int maximum) {}; + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCPOPProgressCallback.h b/MailCore.framework/Versions/A/Headers/MCPOPProgressCallback.h new file mode 100644 index 0000000..c28e396 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCPOPProgressCallback.h @@ -0,0 +1,20 @@ +#ifndef MAILCORE_MCPOPPROGRESSCALLBACK_H + +#define MAILCORE_MCPOPPROGRESSCALLBACK_H + +#ifdef __cplusplus + +namespace mailcore { + + class POPSession; + + class POPProgressCallback { + public: + virtual void bodyProgress(POPSession * session, unsigned int current, unsigned int maximum) {}; + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCPOPSession.h b/MailCore.framework/Versions/A/Headers/MCPOPSession.h new file mode 100644 index 0000000..dfe6765 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCPOPSession.h @@ -0,0 +1,100 @@ +#ifndef MAILCORE_MCPOPSESSION_H + +#define MAILCORE_MCPOPSESSION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class POPMessageInfo; + class POPProgressCallback; + class MessageHeader; + + class POPSession : public Object { + public: + POPSession(); + virtual ~POPSession(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * username); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + + virtual void setAuthType(AuthType authType); + virtual AuthType authType(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void connect(ErrorCode * pError); + virtual void disconnect(); + + virtual void login(ErrorCode * pError); + + virtual void checkAccount(ErrorCode * pError); + + virtual void noop(ErrorCode * pError); + + Array * /* POPMessageInfo */ fetchMessages(ErrorCode * pError); + + MessageHeader * fetchHeader(unsigned int index, ErrorCode * pError); + MessageHeader * fetchHeader(POPMessageInfo * msg, ErrorCode * pError); + + Data * fetchMessage(unsigned int index, POPProgressCallback * callback, ErrorCode * pError); + Data * fetchMessage(POPMessageInfo * msg, POPProgressCallback * callback, ErrorCode * pError); + + void deleteMessage(unsigned int index, ErrorCode * pError); + void deleteMessage(POPMessageInfo * msg, ErrorCode * pError); + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + + private: + String * mHostname; + unsigned int mPort; + String * mUsername; + String * mPassword; + AuthType mAuthType; + ConnectionType mConnectionType; + bool mCheckCertificateEnabled; + time_t mTimeout; + + mailpop3 * mPop; + POPCapability mCapabilities; + POPProgressCallback * mProgressCallback; + int mState; + + ConnectionLogger * mConnectionLogger; + + void init(); + void bodyProgress(unsigned int current, unsigned int maximum); + bool checkCertificate(); + static void body_progress(size_t current, size_t maximum, void * context); + void setup(); + void unsetup(); + void connectIfNeeded(ErrorCode * pError); + void loginIfNeeded(ErrorCode * pError); + void listIfNeeded(ErrorCode * pError); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCProvider.h b/MailCore.framework/Versions/A/Headers/MCProvider.h new file mode 100644 index 0000000..b13bb26 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCProvider.h @@ -0,0 +1,17 @@ +// +// 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 +#include +#include + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCRFC822.h b/MailCore.framework/Versions/A/Headers/MCRFC822.h new file mode 100644 index 0000000..66c4d40 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCRFC822.h @@ -0,0 +1,11 @@ +#ifndef MAILCORE_MCRFC822_H + +#define MAILCORE_MCRFC822_H + +#include +#include +#include +#include +#include + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCRange.h b/MailCore.framework/Versions/A/Headers/MCRange.h new file mode 100644 index 0000000..12e1a9c --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCRange.h @@ -0,0 +1,40 @@ +#ifndef MAILCORE_MCRANGE_H + +#define MAILCORE_MCRANGE_H + +#ifdef __cplusplus + +#include + +#ifndef UINT64_MAX +# define UINT64_MAX 18446744073709551615ULL +#endif + +namespace mailcore { + + class IndexSet; + class String; + + // infinite length : UINT64_MAX + // empty range : location = UINT64_MAX + struct Range { + uint64_t location; + uint64_t length; + }; + + extern Range RangeEmpty; + + Range RangeMake(uint64_t location, uint64_t length); + IndexSet * RangeRemoveRange(Range range1, Range range2); + IndexSet * RangeUnion(Range range1, Range range2); + Range RangeIntersection(Range range1, Range range2); + bool RangeHasIntersection(Range range1, Range range2); + uint64_t RangeLeftBound(Range range); + uint64_t RangeRightBound(Range range); + String * RangeToString(Range range); + Range RangeFromString(String * rangeString); +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCRenderer.h b/MailCore.framework/Versions/A/Headers/MCRenderer.h new file mode 100644 index 0000000..441b63b --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCRenderer.h @@ -0,0 +1,17 @@ +// +// MCRenderer.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 2/2/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCRENDERER_H + +#define MAILCORE_MCRENDERER_H + +#include +#include +#include + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCSMTP.h b/MailCore.framework/Versions/A/Headers/MCSMTP.h new file mode 100644 index 0000000..452e024 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCSMTP.h @@ -0,0 +1,8 @@ +#ifndef MAILCORE_MCSMTP_H + +#define MAILCORE_MCSMTP_H + +#include +#include + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCSMTPAsyncSession.h b/MailCore.framework/Versions/A/Headers/MCSMTPAsyncSession.h new file mode 100644 index 0000000..fa0893d --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCSMTPAsyncSession.h @@ -0,0 +1,90 @@ +#ifndef MAILCORE_MCSMTPASYNCSESSION_H + +#define MAILCORE_MCSMTPASYNCSESSION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class MessageBuilder; + class SMTPOperation; + class SMTPSession; + class Address; + class SMTPOperationQueueCallback; + class SMTPConnectionLogger; + + class SMTPAsyncSession : public Object { + public: + SMTPAsyncSession(); + virtual ~SMTPAsyncSession(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * username); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + + virtual void setOAuth2Token(String * token); + virtual String * OAuth2Token(); + + virtual void setAuthType(AuthType authType); + virtual AuthType authType(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void setUseHeloIPEnabled(bool enabled); + virtual bool useHeloIPEnabled(); + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + +#ifdef __APPLE__ + virtual void setDispatchQueue(dispatch_queue_t dispatchQueue); + virtual dispatch_queue_t dispatchQueue(); +#endif + + virtual SMTPOperation * sendMessageOperation(Data * messageData); + virtual SMTPOperation * sendMessageOperation(Address * from, Array * recipients, + Data * messageData); + virtual SMTPOperation * checkAccountOperation(Address * from); + + virtual SMTPOperation * noopOperation(); + + public: // private + virtual void runOperation(SMTPOperation * operation); + virtual SMTPSession * session(); + virtual void tryAutomaticDisconnect(); + virtual void logConnection(ConnectionLogType logType, Data * buffer); + + private: + SMTPSession * mSession; + OperationQueue * mQueue; + SMTPOperationQueueCallback * mQueueCallback; + ConnectionLogger * mConnectionLogger; + pthread_mutex_t mConnectionLoggerLock; + SMTPConnectionLogger * mInternalLogger; + + virtual void tryAutomaticDisconnectAfterDelay(void * context); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCSMTPNoopOperation.h b/MailCore.framework/Versions/A/Headers/MCSMTPNoopOperation.h new file mode 100644 index 0000000..0911675 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCSMTPNoopOperation.h @@ -0,0 +1,34 @@ +// +// MCSMTPNoopOperation.h +// mailcore2 +// +// Created by Robert Widmann on 9/24/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCSMTPNOOPOPERATION_H + +#define MAILCORE_MCSMTPNOOPOPERATION_H + +#include +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class SMTPNoopOperation : public SMTPOperation { + public: + SMTPNoopOperation(); + virtual ~SMTPNoopOperation(); + + public: // subclass behavior + virtual void main(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCSMTPOperation.h b/MailCore.framework/Versions/A/Headers/MCSMTPOperation.h new file mode 100644 index 0000000..1d24f48 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCSMTPOperation.h @@ -0,0 +1,52 @@ +// +// MCSMTPOperation.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/11/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCSMTPOPERATION_H + +#define MAILCORE_MCSMTPOPERATION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class SMTPAsyncSession; + class SMTPOperationCallback; + + class SMTPOperation : public Operation, public SMTPProgressCallback { + public: + SMTPOperation(); + virtual ~SMTPOperation(); + + virtual void setSession(SMTPAsyncSession * session); + virtual SMTPAsyncSession * session(); + + virtual void setSmtpCallback(SMTPOperationCallback * callback); + virtual SMTPOperationCallback * smtpCallback(); + + virtual void setError(ErrorCode error); + virtual ErrorCode error(); + + virtual void start(); + + private: + SMTPAsyncSession * mSession; + SMTPOperationCallback * mSmtpCallback; + ErrorCode mError; + private: + virtual void bodyProgress(SMTPSession * session, unsigned int current, unsigned int maximum); + virtual void bodyProgressOnMainThread(void * context); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCSMTPOperationCallback.h b/MailCore.framework/Versions/A/Headers/MCSMTPOperationCallback.h new file mode 100644 index 0000000..5a3d00d --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCSMTPOperationCallback.h @@ -0,0 +1,28 @@ +// +// MCSMTPOperationCallback.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/11/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCSMTPOPERATIONCALLBACK_H + +#define MAILCORE_MCSMTPOPERATIONCALLBACK_H + +#ifdef __cplusplus + +namespace mailcore { + + class SMTPOperation; + + class SMTPOperationCallback { + public: + virtual void bodyProgress(SMTPOperation * session, unsigned int current, unsigned int maximum) {}; + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCSMTPProgressCallback.h b/MailCore.framework/Versions/A/Headers/MCSMTPProgressCallback.h new file mode 100644 index 0000000..7016cfc --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCSMTPProgressCallback.h @@ -0,0 +1,20 @@ +#ifndef MAILCORE_MCSMTPPROGRESSCALLBACK_H + +#define MAILCORE_MCSMTPPROGRESSCALLBACK_H + +#ifdef __cplusplus + +namespace mailcore { + + class SMTPSession; + + class SMTPProgressCallback { + public: + virtual void bodyProgress(SMTPSession * session, unsigned int current, unsigned int maximum) {}; + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCSMTPSession.h b/MailCore.framework/Versions/A/Headers/MCSMTPSession.h new file mode 100644 index 0000000..844369f --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCSMTPSession.h @@ -0,0 +1,111 @@ +#ifndef MAILCORE_MCSMTPSESSION_H + +#define MAILCORE_MCSMTPSESSION_H + +#include +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Address; + class SMTPProgressCallback; + class MessageBuilder; + + class SMTPSession : public Object { + public: + SMTPSession(); + virtual ~SMTPSession(); + + virtual void setHostname(String * hostname); + virtual String * hostname(); + + virtual void setPort(unsigned int port); + virtual unsigned int port(); + + virtual void setUsername(String * username); + virtual String * username(); + + virtual void setPassword(String * password); + virtual String * password(); + + // To authenticate using OAuth2, username and oauth2token should be set. + // auth type to use is AuthTypeOAuth2. + virtual void setOAuth2Token(String * token); + virtual String * OAuth2Token(); + + virtual void setAuthType(AuthType authType); + virtual AuthType authType(); + + virtual void setConnectionType(ConnectionType connectionType); + virtual ConnectionType connectionType(); + + virtual void setTimeout(time_t timeout); + virtual time_t timeout(); + + virtual void setCheckCertificateEnabled(bool enabled); + virtual bool isCheckCertificateEnabled(); + + virtual void setUseHeloIPEnabled(bool enabled); + virtual bool useHeloIPEnabled(); + + virtual void connect(ErrorCode * pError); + virtual void disconnect(); + + virtual void login(ErrorCode * pError); + + virtual void checkAccount(Address * from, ErrorCode * pError); + + virtual void sendMessage(Data * messageData, SMTPProgressCallback * callback, ErrorCode * pError); + virtual void sendMessage(Address * from, Array * /* Address */ recipients, Data * messageData, + SMTPProgressCallback * callback, ErrorCode * pError); + + virtual void setConnectionLogger(ConnectionLogger * logger); + virtual ConnectionLogger * connectionLogger(); + + virtual void noop(ErrorCode * pError); + + private: + String * mHostname; + unsigned int mPort; + String * mUsername; + String * mPassword; + String * mOAuth2Token; + AuthType mAuthType; + ConnectionType mConnectionType; + time_t mTimeout; + bool mCheckCertificateEnabled; + bool mUseHeloIPEnabled; + bool mShouldDisconnect; + + mailsmtp * mSmtp; + SMTPProgressCallback * mProgressCallback; + int mState; + String * mLastSMTPResponse; + int mLastLibetpanError; + int mLastSMTPResponseCode; + + ConnectionLogger * mConnectionLogger; + + void init(); + Data * dataWithFilteredBcc(Data * data); + static void body_progress(size_t current, size_t maximum, void * context); + void bodyProgress(unsigned int current, unsigned int maximum); + 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(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCSet.h b/MailCore.framework/Versions/A/Headers/MCSet.h new file mode 100644 index 0000000..334310a --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCSet.h @@ -0,0 +1,49 @@ +#ifndef MAILCORE_CSET_H + +#define MAILCORE_CSET_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class String; + class Array; + class HashMap; + + class Set : public Object { + public: + Set(); + Set(Set * o); + + static Set * set(); + static Set * setWithArray(Array * objects); + + virtual unsigned int count(); + virtual void addObject(Object * obj); + virtual void removeObject(Object * obj); + virtual bool containsObject(Object * obj); + virtual Object * member(Object * obj); + + virtual Array * allObjects(); + virtual void removeAllObjects(); + virtual void addObjectsFromArray(Array * objects); + + public: // subclass behavior + virtual ~Set(); + virtual String * description(); + virtual Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + private: + HashMap * mHash; + void init(); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCSizeFormatter.h b/MailCore.framework/Versions/A/Headers/MCSizeFormatter.h new file mode 100644 index 0000000..8c139f6 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCSizeFormatter.h @@ -0,0 +1,30 @@ +// +// MCSizeFormatter.h +// testUI +// +// Created by DINH Viêt Hoà on 1/29/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MCSIZEFORMATTER_H + +#define MAILCORE_MCSIZEFORMATTER_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class String; + + class SizeFormatter : public Object { + public: + static String * stringWithSize(unsigned int size); + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCString.h b/MailCore.framework/Versions/A/Headers/MCString.h new file mode 100644 index 0000000..25439cf --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCString.h @@ -0,0 +1,145 @@ +#ifndef MAILCORE_MCSTR_H + +#define MAILCORE_MCSTR_H + +#include +#include +#include + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class Data; + class Array; + + class String : public Object { + public: + String(const UChar * unicodeChars = NULL); + String(const UChar * unicodeChars, unsigned int length); + String(const char * UTF8Characters); + String(Data * data, const char * charset); + String(const char * bytes, unsigned int length, const char * charset = NULL); + virtual ~String(); + + static String * string(); + static String * stringWithUTF8Format(const char * format, ...); + static String * stringWithVUTF8Format(const char * format, va_list ap); + static String * stringWithUTF8Characters(const char * UTF8Characters); + static String * stringWithCharacters(const UChar * characters); + static String * stringWithCharacters(const UChar * characters, unsigned int length); + static String * stringWithData(Data * data, const char * charset = NULL); + + virtual const UChar * unicodeCharacters(); + virtual const char * UTF8Characters(); + virtual unsigned int length(); + + virtual void appendString(String * otherString); + virtual void appendUTF8Format(const char * format, ...); + virtual void appendCharacters(const UChar * unicodeCharacters); + virtual void appendCharactersLength(const UChar * unicodeCharacters, unsigned int length); + virtual void appendUTF8Characters(const char * UTF8Characters); + virtual void setString(String * otherString); + virtual void setUTF8Characters(const char * UTF8Characters); + virtual void setCharacters(const UChar * unicodeCharacters); + + virtual String * stringByAppendingString(String * otherString); + virtual String * stringByAppendingUTF8Format(const char * format, ...); + virtual String * stringByAppendingUTF8Characters(const char * UTF8Characters); + virtual String * stringByAppendingCharacters(const UChar * unicodeCharacters); + virtual String * stringByAppendingPathComponent(String * component); + virtual String * stringByDeletingLastPathComponent(); + + virtual int compare(String * otherString); + virtual int caseInsensitiveCompare(String * otherString); + virtual String * lowercaseString(); + virtual String * uppercaseString(); + + virtual UChar characterAtIndex(unsigned int idx); + virtual void deleteCharactersInRange(Range range); + virtual unsigned int replaceOccurrencesOfString(String * occurrence, String * replacement); + virtual int locationOfString(String * occurrence); + + virtual Array * componentsSeparatedByString(String * separator); + + virtual bool isEqualCaseInsensitive(String * otherString); + + // Additions + static String * stringByDecodingMIMEHeaderValue(const char * phrase); + virtual Data * encodedAddressDisplayNameValue(); + virtual Data * encodedMIMEHeaderValue(); + virtual Data * encodedMIMEHeaderValueForSubject(); + virtual String * extractedSubject(); + virtual String * extractedSubjectAndKeepBracket(bool keepBracket); + static String * uuidString(); + + virtual bool hasSuffix(String * suffix); + virtual bool hasPrefix(String * prefix); + + virtual String * substringFromIndex(unsigned int idx); + virtual String * substringToIndex(unsigned int idx); + virtual String * substringWithRange(Range range); + + virtual String * flattenHTML(); + virtual String * flattenHTMLAndShowBlockquote(bool showBlockquote); + virtual String * flattenHTMLAndShowBlockquoteAndLink(bool showBlockquote, bool showLink); + + virtual String * stripWhitespace(); + + virtual String * lastPathComponent(); + virtual String * pathExtension(); + virtual Data * dataUsingEncoding(const char * charset = NULL); + + virtual const char * fileSystemRepresentation(); + static String * stringWithFileSystemRepresentation(const char * filename); + + int intValue(); + unsigned int unsignedIntValue(); + long longValue(); + unsigned long unsignedLongValue(); + long long longLongValue(); + unsigned long long unsignedLongLongValue(); + double doubleValue(); + + virtual Data * mUTF7EncodedData(); + static String * stringWithMUTF7Data(Data * data); + virtual String * mUTF7EncodedString(); + virtual String * mUTF7DecodedString(); + + virtual String * htmlEncodedString(); + virtual String * cleanedHTMLString(); + virtual String * htmlMessageContent(); + + virtual Data * decodedBase64Data(); + + public: // private + static String * uniquedStringWithUTF8Characters(const char * UTF8Characters); + + public: // subclass behavior + String(String * otherString); + virtual String * description(); + virtual Object * copy(); + virtual bool isEqual(Object * otherObject); + virtual unsigned int hash(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + private: + UChar * mUnicodeChars; + unsigned int mLength; + unsigned int mAllocated; + void allocate(unsigned int length); + void reset(); + int compareWithCaseSensitive(String * otherString, bool caseSensitive); + void appendBytes(const char * bytes, unsigned int length, const char * charset); + void appendUTF8CharactersLength(const char * UTF8Characters, unsigned int length); + }; + + void setICUDataDirectory(String * directory); +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCUtils.h b/MailCore.framework/Versions/A/Headers/MCUtils.h new file mode 100644 index 0000000..ad9c4db --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCUtils.h @@ -0,0 +1,41 @@ +#ifndef MAILCORE_MCUTILS_H + +#define MAILCORE_MCUTILS_H + +#ifdef __cplusplus + +#define MC_SAFE_RETAIN(o) ((o) != NULL ? (o)->retain() : NULL) +#define MC_SAFE_COPY(o) ((o) != NULL ? (o)->copy() : NULL) + +#define MC_SAFE_RELEASE(o) \ + do { \ + if ((o) != NULL) { \ + (o)->release(); \ + (o) = NULL; \ + } \ + } while (0) + +#define MC_SAFE_REPLACE_RETAIN(type, mField, value) \ + do { \ + MC_SAFE_RELEASE(mField); \ + mField = (type *) MC_SAFE_RETAIN(value); \ + } while (0) + +#define MC_SAFE_REPLACE_COPY(type, mField, value) \ + do { \ + MC_SAFE_RELEASE(mField); \ + mField = (type *) MC_SAFE_COPY(value); \ + } while (0) + +#define MCSTR(str) mailcore::String::uniquedStringWithUTF8Characters("" str "") + +#define MCUTF8(str) MCUTF8DESC(str) +#define MCUTF8DESC(obj) ((obj) != NULL ? (obj)->description()->UTF8Characters() : NULL ) + +#define MCLOCALIZEDSTRING(key) key + +#define MCISKINDOFCLASS(instance, class) (dynamic_cast(instance) != NULL) + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MCValue.h b/MailCore.framework/Versions/A/Headers/MCValue.h new file mode 100644 index 0000000..7de1a0d --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MCValue.h @@ -0,0 +1,111 @@ +#ifndef MAILCORE_MCVALUE_H + +#define MAILCORE_MCVALUE_H + +#include + +#ifdef __cplusplus + +namespace mailcore { + + class String; + + enum { + ValueTypeNone, + ValueTypeBool, + ValueTypeChar, + ValueTypeUnsignedChar, + ValueTypeShort, + ValueTypeUnsignedShort, + ValueTypeInt, + ValueTypeUnsignedInt, + ValueTypeLong, + ValueTypeUnsignedLong, + ValueTypeLongLong, + ValueTypeUnsignedLongLong, + ValueTypeFloat, + ValueTypeDouble, + ValueTypePointer, + ValueTypeData, + }; + + class Value : public Object { + public: + virtual ~Value(); + + static Value * valueWithBoolValue(bool value); + static Value * valueWithCharValue(char value); + static Value * valueWithUnsignedCharValue(unsigned char value); + static Value * valueWithIntValue(int value); + static Value * valueWithUnsignedIntValue(unsigned int value); + static Value * valueWithLongValue(long value); + static Value * valueWithUnsignedLongValue(unsigned long value); + static Value * valueWithLongLongValue(long long value); + static Value * valueWithUnsignedLongLongValue(unsigned long long value); + static Value * valueWithFloatValue(float value); + static Value * valueWithDoubleValue(double value); + static Value * valueWithPointerValue(void * value); + static Value * valueWithData(const char * value, int length); + + virtual bool boolValue(); + virtual char charValue(); + virtual unsigned char unsignedCharValue(); + virtual short shortValue(); + virtual unsigned short unsignedShortValue(); + virtual int intValue(); + virtual unsigned int unsignedIntValue(); + virtual long longValue(); + virtual unsigned long unsignedLongValue(); + virtual long long longLongValue(); + virtual unsigned long long unsignedLongLongValue(); + virtual float floatValue(); + virtual double doubleValue(); + virtual void * pointerValue(); + virtual void dataValue(const char ** p_value, int * p_length); + + public: // subclass behavior + Value(Value * other); + virtual String * description(); + virtual bool isEqual(Object * otherObject); + virtual unsigned int hash(); + Object * copy(); + virtual HashMap * serializable(); + virtual void importSerializable(HashMap * serializable); + + public: // private + static void * createObject(); + + private: + int mType; + union { + bool boolValue; + char charValue; + unsigned char unsignedCharValue; + short shortValue; + unsigned short unsignedShortValue; + int intValue; + unsigned int unsignedIntValue; + long longValue; + unsigned long unsignedLongValue; + long long longLongValue; + unsigned long long unsignedLongLongValue; + float floatValue; + double doubleValue; + void * pointerValue; + struct { + char * data; + int length; + } dataValue; + } mValue; + Value(); + + public: // private + virtual int type(); + + }; + +} + +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/MailCore.h b/MailCore.framework/Versions/A/Headers/MailCore.h new file mode 100644 index 0000000..8b0897f --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/MailCore.h @@ -0,0 +1,17 @@ +// +// mailcore.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/10/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_MAILCORE_H + +#define MAILCORE_MAILCORE_H + +#include +#include +#include + +#endif diff --git a/MailCore.framework/Versions/A/Headers/NSArray+MCO.h b/MailCore.framework/Versions/A/Headers/NSArray+MCO.h new file mode 100644 index 0000000..fd0cc6a --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/NSArray+MCO.h @@ -0,0 +1,31 @@ +// +// NSArray+MCO.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/29/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_NSARRAY_MCO_H + +#define MAILCORE_NSARRAY_MCO_H + +#import + +#ifdef __cplusplus +namespace mailcore { + class Array; +} +#endif + +@interface NSArray (MCO) + +#ifdef __cplusplus ++ (NSArray *) mco_arrayWithMCArray:(mailcore::Array *)array; + +- (mailcore::Array *) mco_mcArray; +#endif + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/NSData+MCO.h b/MailCore.framework/Versions/A/Headers/NSData+MCO.h new file mode 100644 index 0000000..ddb0959 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/NSData+MCO.h @@ -0,0 +1,31 @@ +// +// NSData+MCO.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/21/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_NSDATA_MCO_H + +#define MAILCORE_NSDATA_MCO_H + +#import + +#ifdef __cplusplus +namespace mailcore { + class Data; +} +#endif + +@interface NSData (MCO) + +#ifdef __cplusplus ++ (NSData *) mco_dataWithMCData:(mailcore::Data *)cppData; + +- (mailcore::Data *) mco_mcData; +#endif + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/NSDictionary+MCO.h b/MailCore.framework/Versions/A/Headers/NSDictionary+MCO.h new file mode 100644 index 0000000..3479830 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/NSDictionary+MCO.h @@ -0,0 +1,31 @@ +// +// NSDictionary+MCO.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/29/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_NSDICTIONARY_MCO_H + +#define MAILCORE_NSDICTIONARY_MCO_H + +#import + +#ifdef __cplusplus +namespace mailcore { + class HashMap; +} +#endif + +@interface NSDictionary (MCO) + +#ifdef __cplusplus ++ (NSDictionary *) mco_dictionaryWithMCHashMap:(mailcore::HashMap *)hashmap; + +- (mailcore::HashMap *) mco_mcHashMap; +#endif + +@end + +#endif \ No newline at end of file diff --git a/MailCore.framework/Versions/A/Headers/NSError+MCO.h b/MailCore.framework/Versions/A/Headers/NSError+MCO.h new file mode 100644 index 0000000..027796e --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/NSError+MCO.h @@ -0,0 +1,19 @@ +// +// Created by mronge on 1/31/13. +// + +#ifndef MAILCORE_NSERROR_MCO_H + +#define MAILCORE_NSERROR_MCO_H + +#import + +#import + +@interface NSError (MCO) +#ifdef __cplusplus ++ (NSError *) mco_errorWithErrorCode:(mailcore::ErrorCode)code; +#endif +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/NSIndexSet+MCO.h b/MailCore.framework/Versions/A/Headers/NSIndexSet+MCO.h new file mode 100644 index 0000000..66aa522 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/NSIndexSet+MCO.h @@ -0,0 +1,18 @@ +// +// NSIndexSet+MCO.h +// mailcore2 +// +// Created by Hoa V. DINH on 9/10/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#import + +@class MCOIndexSet; + +@interface NSIndexSet (MCO) + +/** Returns a MCOIndexSet from an NSIndexSet */ +- (MCOIndexSet *) mcoIndexSet; + +@end diff --git a/MailCore.framework/Versions/A/Headers/NSObject+MCO.h b/MailCore.framework/Versions/A/Headers/NSObject+MCO.h new file mode 100644 index 0000000..923cc26 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/NSObject+MCO.h @@ -0,0 +1,109 @@ +// +// NSObject+MCO.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/29/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_NSOBJECT_MCO_H + +#define MAILCORE_NSOBJECT_MCO_H + +#import + +#ifdef __cplusplus +#include +#endif + +#ifdef __cplusplus +namespace mailcore { + class Object; +} +#endif + +#define MCO_NATIVE_INSTANCE ((nativeType *) [self mco_mcObject]) + +#define MCO_TO_OBJC(mcValue) \ + [NSObject mco_objectWithMCObject:((mailcore::Object *) (mcValue))] + +#define MCO_FROM_OBJC(type, objcValue) \ + ((type *) [(objcValue) mco_mcObject]) + +#define MCO_OBJC_BRIDGE_SET(setter, mcValueType, objcValue) \ + MCO_NATIVE_INSTANCE->setter((mcValueType *) [(objcValue) mco_mcObject]) + +#define MCO_OBJC_BRIDGE_GET(getter) \ + [NSObject mco_objectWithMCObject:MCO_NATIVE_INSTANCE->getter()] + +#define MCO_OBJC_SYNTHESIZE_TYPE(objcType, mcType, setter, getter) \ +- (objcType *) getter \ +{ \ +return MCO_OBJC_BRIDGE_GET(getter); \ +} \ +\ +- (void) setter:(objcType *)getter \ +{ \ +MCO_OBJC_BRIDGE_SET(setter, mcType, getter); \ +} + +#define MCO_OBJC_SYNTHESIZE(type, setter, getter) \ + MCO_OBJC_SYNTHESIZE_TYPE(MCO ## type, mailcore::type, setter, getter) + +#define MCO_OBJC_SYNTHESIZE_SCALAR(objcType, mcType, setter, getter) \ +- (objcType) getter \ +{ \ +return (objcType) MCO_NATIVE_INSTANCE->getter(); \ +} \ +\ +- (void) setter:(objcType)getter \ +{ \ +MCO_NATIVE_INSTANCE->setter((mcType) getter); \ +} + +#define MCO_OBJC_SYNTHESIZE_STRING(setter, getter) MCO_OBJC_SYNTHESIZE_TYPE(NSString, mailcore::String, setter, getter) +#define MCO_OBJC_SYNTHESIZE_ARRAY(setter, getter) MCO_OBJC_SYNTHESIZE_TYPE(NSArray, mailcore::Array, setter, getter) +#define MCO_OBJC_SYNTHESIZE_DATA(setter, getter) MCO_OBJC_SYNTHESIZE_TYPE(NSData, mailcore::Data, setter, getter) +#define MCO_OBJC_SYNTHESIZE_HASHMAP(setter, getter) MCO_OBJC_SYNTHESIZE_TYPE(NSDictionary, mailcore::HashMap, setter, getter) +#define MCO_OBJC_SYNTHESIZE_BOOL(setter, getter) MCO_OBJC_SYNTHESIZE_SCALAR(BOOL, bool, setter, getter) + +#define MCO_OBJC_SYNTHESIZE_DATE(setter, getter) \ +- (NSDate *) getter \ +{ \ + return [NSDate dateWithTimeIntervalSince1970:MCO_NATIVE_INSTANCE->getter()]; \ +} \ +\ +- (void) setter:(NSDate *)getter \ +{ \ + MCO_NATIVE_INSTANCE->setter([getter timeIntervalSince1970]); \ +} + +#define MCO_SYNTHESIZE_NSCODING \ +- (id) initWithCoder:(NSCoder *)coder \ +{ \ + mailcore::HashMap * serializable = MCO_FROM_OBJC(mailcore::HashMap, [coder decodeObjectForKey:@"info"]); \ + self = MCO_TO_OBJC(mailcore::Object::objectWithSerializable(serializable)); \ + [self retain]; \ + return self; \ +} \ +\ +- (void) encodeWithCoder:(NSCoder *)coder \ +{ \ + [coder encodeObject:MCO_TO_OBJC(MCO_FROM_OBJC(nativeType, self)->serializable()) forKey:@"info"]; \ +} + +@interface NSObject (MCO) + +#ifdef __cplusplus ++ (id) mco_objectWithMCObject:(mailcore::Object *)object; + +- (mailcore::Object *) mco_mcObject; +#endif + +@end + +#ifdef __cplusplus +extern void MCORegisterClass(Class aClass, const std::type_info * info); +#endif + +#endif diff --git a/MailCore.framework/Versions/A/Headers/NSString+MCO.h b/MailCore.framework/Versions/A/Headers/NSString+MCO.h new file mode 100644 index 0000000..71e99a4 --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/NSString+MCO.h @@ -0,0 +1,41 @@ +// +// NSString+MCO.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 1/21/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_NSSTRING_MCO_H + +#define MAILCORE_NSSTRING_MCO_H + +#import + +#ifdef __cplusplus +namespace mailcore { + class String; + class Object; +} +#endif + +@interface NSString (MCO) + +#ifdef __cplusplus ++ (NSString *) mco_stringWithMCString:(mailcore::String *)cppString; ++ (NSString *) mco_stringWithMCObject:(mailcore::Object *)object; + +- (mailcore::String *) mco_mcString; +#endif + +- (NSString *) mco_flattenHTML; +- (NSString *) mco_flattenHTMLAndShowBlockquote:(BOOL)showBlockquote; +- (NSString *) mco_flattenHTMLAndShowBlockquote:(BOOL)showBlockquote showLink:(BOOL)showLink; + +- (NSString *) mco_htmlEncodedString; +- (NSString *) mco_cleanedHTMLString; +- (NSString *) mco_strippedWhitespace; + +@end + +#endif diff --git a/MailCore.framework/Versions/A/Headers/NSValue+MCO.h b/MailCore.framework/Versions/A/Headers/NSValue+MCO.h new file mode 100644 index 0000000..007662b --- /dev/null +++ b/MailCore.framework/Versions/A/Headers/NSValue+MCO.h @@ -0,0 +1,31 @@ +// +// NSValue+MCO.h +// mailcore2 +// +// Created by DINH Viêt Hoà on 3/21/13. +// Copyright (c) 2013 MailCore. All rights reserved. +// + +#ifndef MAILCORE_NSVALUE_MCO_H + +#define MAILCORE_NSVALUE_MCO_H + +#import + +#ifdef __cplusplus +namespace mailcore { + class Value; +} +#endif + +@interface NSValue (MCO) + +#ifdef __cplusplus ++ (NSValue *) mco_valueWithMCValue:(mailcore::Value *)value; + +- (mailcore::Value *) mco_mcValue; +#endif + +@end + +#endif diff --git a/MailCore.framework/Versions/A/MailCore b/MailCore.framework/Versions/A/MailCore new file mode 100755 index 0000000000000000000000000000000000000000..d1ad861644393939d965301612829f34d9538935 GIT binary patch literal 8559804 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�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%0DoNNUa`&qMO}{IwiM0C_ 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
vZsi~6^MB$Qh<`su&b90pLGyLmZlp&$ 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�H;wXnP7QycGcLlV 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%0D$Qh|HWw=tOsEDMX8!31NMJnu5WlxFn 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ǘIbYV6<;>8GIgchIJ# zSGkLxV32Ll8*psd2>vzvbMyb?xyvfxUCFp;xk;~-2l3_6lH5nkNWNuxuHL=sNn?{s zjLq~JncC6*V^%o_+&lgQ!r3K0#9hpxbp(8b3^@cj9%n}}hgqdwyc}eVQULikAOoKy zHkECuEhA&VBV)C@;PE6fn!v;;!>Y+ZUstodfsR2o_J$R^7TdCtjZ1`)0r$Krh@5H< z7$R_-dcAwZD&`L5V@O7tL6z%g=QfkK{QkgrZXgpj2w+AKAS2ZxmA7tBVCNlTt1)&0 zaf}%Tyj#%-zY#u$13sQ14+Z_)2-bmV*J(7KDwwz_74|CpisjPFN_!|fvmjreYgs0? zgGL{0igpUE;D-CFt=+j>+>&0cGA!BNUp-72+>JC#m}u|N?mXYtO$-ku4d=37firkS zimc2ZO|IUmZPh^>+ZIH++cD=$2!>t`RP!za zhA&uL5F>Gv?oL2Z-PQO+BF;;g!YiIijEkAUzmjqJ<4YTt`q#X?aT&QLIWA4CmLrDY zaibE(gP~1~!3WqNCx$C;Bloh#VAiVS7#zx1;mJmo!3B z@K*MxF(oAAd+{gn5Q%o-G|XINL&RhG%u%_P=QyUSkQbZc`eaN~OY*r6-ljS$_6!9- zGk`=c>Y?MzEKVi8*X5DfnWIvL<3*qCce}mu%|Wgq!ktAiC1uZ@JF5(T5SNEs?lcpZ zor%jsZr@MyDVv!_m5RGtmivj0_o39PqoO9Qr5#F$&OhVzC|*nw^6d^WS8x4f^5&*Y76bL85i2QR)^Xc+$XjS%R#D%LR$qTN8!`7g6TOk+ z;aXJo*@;$}C9Qj~T+=ewVKtd+rHabBd}X?j=PrsXTOs`j^}X6`@$ELOJF{G$_t5lK zU*!z4R#chxRi3LVk0@6;%~x531JhqieM6#3Rpajaw))#&S6$_+eU(d8RjL~I zE??y;!WC71(^t7rd78>quH>64Z}$UjsRun!hEmnIhrVTuM5L71@7V5YkfhRb%?k*@ z76XgER?+PiZNpJcS)r6ueTuMJPWexz9OqMn<8sQsDdp`xMSU!%9IKRle2PFVr@WOE zb}0kyp3jQsHAVO129(*Jl_LO-19L+v|J4@wpXu$Df)5)0|0x#q7XVAVF*56;Om2+~ zj8a`|d`7lK+MoNhLVKTCtKSSp>o}Ns;FB_%H%}ZW&Q_d4K?Iz9K>=pne12T7b_u@K zpJE@6;p0&YIZUw_YoB*DMx!T>gW{sVgN+5=LhNfGTk}oKEzyLk!vuSwYP}7v9BSQ4 zTF~&>o`^5?K-_M-Zy>qn5&(bs1_toypH}R}=$iX2@x~xJHxAI`CvG*AODHY7PqVM- zq{eBxXr!CU48mG1eXg7syVmh41T)5UAO8cpLK@L9_qxXx*OvbVl%eK$-~aIcmGOS~ zloucGfge_n_qksUVhy5Kd7dKrc(kfWa1amJr|nb4pAT0iyrhZR&%Vj z`ufEIQ(eDSO5VJh(8dxv;yb5{H%)vIDW>m!_wktIjwV{k4gC5=L(Ge#y*JPS_u3f3 ztk9y2qpDzKxdP#-7LQtE4SGjGnL|F}J)U!

k5$dxH45( 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

6?aNeU)eS7_fTC7F83D&BG8E^#y?cV?5v|AuF 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 *IJnC+a4Nj*(b48qs?hl|UzTbn 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Ξ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

+(KtxeIu zr?CN_6M$bFAw8tx3^vJ9{-|c}o@|w9L3uri4)|yDiNfr`R(|-7j*LSf7UKZSV*qm- zhE0Dp;E!TXt?9lwrk;^b>$0gR>KygR}+ ziDJPKdu#>)Vt*Zg?T>L_-X0CS8yoO`u>JrC=9Q=CgZUfTiXE7rmyJ2AD>e~d4Q4IA z+Y)^;-wi(1D;Q0O0<4^oVD(b2E)PDnGIIv;pR zLV#cu<1Xa&EUD!yGu^@!FDL%)C_Jz<99SL>yb>Ppa^k6+T;rsZ1;eP)Tk`=j+zVP` z%EQUhXmWf}b5)5NBc7VcuRQzns`oPgX<7sc`N^fZ{fK`Y+ZyMJjZsCdqf4?u7A5DS z?;TY%w)M(VE9Ls3^b)0`NH)>c`Gtn~z^gVycVbic2i`QqLwvopNiX<7 z?O=F!yW!pF7wHa1CE##!7XzE@2DSh~@&~qhs0}Q`!&|bcZD2DgqJfQ6_kKqP1ACl8 zZeS(!+ge7}p=K5jZ-vTG_Ii72aJz1DgR3AVJGd+g-|cKDG~yLbYAc^xnUBII-m)ls z+RB!L!d&qz3V-Pr6AJHEF}Iy)L*c(5Nq?jtYh#ce63|HB+SoSIzf&ZK!oQKhNEcGp zjr2GM0SX6ExuR0fQ$C|i+Eb(K<&W}wQaX;ca`rZImxjBsampK8r~Sb@V1w{O>Z�)CsiBNMuCo+>hn7>e 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 z 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 hu$?`@B8v0TI7^AKI{VSpH6 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 R!g%} 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