1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 // clang-format off 7 #ifndef _nsImapCore_H_ 8 #define _nsImapCore_H_ 9 10 #include "MailNewsTypes.h" 11 #include "nsString.h" 12 13 /* imap message flags */ 14 typedef uint16_t imapMessageFlagsType; 15 16 /* used for communication between imap thread and event sinks */ 17 #define kNoFlags 0x00 /* RFC flags */ 18 #define kMarked 0x01 19 #define kUnmarked 0x02 20 #define kNoinferiors 0x04 21 #define kNoselect 0x08 22 #define kImapTrash 0x10 /* Navigator flag */ 23 #define kJustExpunged 0x20 /* This update is a post expunge url update. */ 24 #define kPersonalMailbox 0x40 /* this mailbox is in the personal namespace */ 25 #define kPublicMailbox 0x80 /* this mailbox is in the public namespace */ 26 #define kOtherUsersMailbox 0x100 /* this mailbox is in the other users' namespace */ 27 #define kNameSpace 0x200 /* this mailbox IS a namespace */ 28 #define kNewlyCreatedFolder 0x400 /* this folder was just created */ 29 #define kImapDrafts 0x800 /* XLIST says this is the drafts folder */ 30 #define kImapSpam 0x1000 /* XLIST says this is the spam folder */ 31 #define kImapSent 0x2000 /* XLIST says this is the sent folder */ 32 #define kImapInbox 0x4000 /* XLIST says this is the INBOX folder */ 33 #define kImapAllMail 0x8000 /* XLIST says this is AllMail (GMail) */ 34 #define kImapXListTrash 0x10000 /* XLIST says this is the trash */ 35 #define kNonExistent 0x20000 /* RFC 5258, LIST-EXTENDED */ 36 #define kSubscribed 0x40000 /* RFC 5258, LIST-EXTENDED */ 37 #define kRemote 0x80000 /* RFC 5258, LIST-EXTENDED */ 38 #define kHasChildren 0x100000 /* RFC 5258, LIST-EXTENDED */ 39 #define kHasNoChildren 0x200000 /* RFC 5258, LIST-EXTENDED */ 40 #define kImapArchive 0x400000 /* RFC 5258, LIST-EXTENDED */ 41 42 /* flags for individual messages */ 43 /* currently the ui only offers \Seen and \Flagged */ 44 #define kNoImapMsgFlag 0x0000 45 #define kImapMsgSeenFlag 0x0001 46 #define kImapMsgAnsweredFlag 0x0002 47 #define kImapMsgFlaggedFlag 0x0004 48 #define kImapMsgDeletedFlag 0x0008 49 #define kImapMsgDraftFlag 0x0010 50 #define kImapMsgRecentFlag 0x0020 51 #define kImapMsgForwardedFlag 0x0040 /* Not always supported, check mailbox folder */ 52 #define kImapMsgMDNSentFlag 0x0080 /* Not always supported. check mailbox folder */ 53 #define kImapMsgCustomKeywordFlag 0x0100 /* this msg has a custom keyword */ 54 #define kImapMsgLabelFlags 0x0E00 /* supports 5 labels only supported if the folder supports keywords */ 55 #define kImapMsgSupportMDNSentFlag 0x2000 56 #define kImapMsgSupportForwardedFlag 0x4000 57 /** 58 * We use a separate xlist trash flag so we can prefer the GMail trash 59 * over an existing Trash folder we may have created. 60 */ 61 #define kImapMsgSupportUserFlag 0x8000 62 /* This seems to be the most cost effective way of 63 * piggying back the server support user flag info. 64 */ 65 66 /* if a url creator does not know the hierarchyDelimiter, use this */ 67 #define kOnlineHierarchySeparatorUnknown '^' 68 #define kOnlineHierarchySeparatorNil '|' 69 70 #define IMAP_URL_TOKEN_SEPARATOR ">" 71 #define kUidUnknown -1 72 // Special initial value meaning ACLs need to be loaded from DB. 73 #define kAclInvalid ((uint32_t) -1) 74 75 // this has to do with Mime Parts on Demand. It used to live in net.h 76 // I'm not sure where this will live, but here is OK temporarily 77 typedef enum { 78 IMAP_CONTENT_NOT_MODIFIED = 0, 79 IMAP_CONTENT_MODIFIED_VIEW_INLINE, 80 IMAP_CONTENT_MODIFIED_VIEW_AS_LINKS, 81 IMAP_CONTENT_FORCE_CONTENT_NOT_MODIFIED 82 } IMAP_ContentModifiedType; 83 84 // I think this should really go in an imap.h equivalent file 85 typedef enum { 86 kPersonalNamespace = 0, 87 kOtherUsersNamespace, 88 kPublicNamespace, 89 kDefaultNamespace, 90 kUnknownNamespace 91 } EIMAPNamespaceType; 92 93 94 /** 95 * IMAP server feature, mostly CAPABILITY responses 96 * 97 * one of the cap flags below 98 */ 99 typedef uint64_t eIMAPCapabilityFlag; 100 /** 101 * IMAP server features, mostly CAPABILITY responses 102 * 103 * any set of the cap flags below, i.e. 104 * i.e. 0, 1 or more |eIMAPCapabilityFlag|. 105 */ 106 typedef uint64_t eIMAPCapabilityFlags; 107 108 const eIMAPCapabilityFlag kCapabilityUndefined = 0x00000000; 109 const eIMAPCapabilityFlag kCapabilityDefined = 0x00000001; 110 const eIMAPCapabilityFlag kHasAuthLoginCapability = 0x00000002; /* AUTH LOGIN (not the same as kHasAuthOldLoginCapability) */ 111 const eIMAPCapabilityFlag kHasAuthOldLoginCapability = 0x00000004; /* original IMAP login method */ 112 const eIMAPCapabilityFlag kHasXSenderCapability = 0x00000008; 113 const eIMAPCapabilityFlag kIMAP4Capability = 0x00000010; /* RFC1734 */ 114 const eIMAPCapabilityFlag kIMAP4rev1Capability = 0x00000020; /* RFC2060 */ 115 const eIMAPCapabilityFlag kIMAP4other = 0x00000040; /* future rev?? */ 116 const eIMAPCapabilityFlag kNoHierarchyRename = 0x00000080; /* no hierarchy rename */ 117 const eIMAPCapabilityFlag kACLCapability = 0x00000100; /* ACL extension */ 118 const eIMAPCapabilityFlag kNamespaceCapability = 0x00000200; /* IMAP4 Namespace Extension */ 119 const eIMAPCapabilityFlag kHasIDCapability = 0x00000400; /* client user agent id extension */ 120 const eIMAPCapabilityFlag kXServerInfoCapability = 0x00000800; /* XSERVERINFO extension for admin urls */ 121 const eIMAPCapabilityFlag kHasAuthPlainCapability = 0x00001000; /* new form of auth plain base64 login */ 122 const eIMAPCapabilityFlag kUidplusCapability = 0x00002000; /* RFC 2359 UIDPLUS extension */ 123 const eIMAPCapabilityFlag kLiteralPlusCapability = 0x00004000; /* RFC 2088 LITERAL+ extension */ 124 const eIMAPCapabilityFlag kAOLImapCapability = 0x00008000; /* aol imap extensions */ 125 const eIMAPCapabilityFlag kHasLanguageCapability = 0x00010000; /* language extensions */ 126 const eIMAPCapabilityFlag kHasCRAMCapability = 0x00020000; /* CRAM auth extension */ 127 const eIMAPCapabilityFlag kQuotaCapability = 0x00040000; /* RFC 2087 quota extension */ 128 const eIMAPCapabilityFlag kHasIdleCapability = 0x00080000; /* RFC 2177 idle extension */ 129 const eIMAPCapabilityFlag kHasAuthNTLMCapability = 0x00100000; /* AUTH NTLM extension */ 130 const eIMAPCapabilityFlag kHasAuthMSNCapability = 0x00200000; /* AUTH MSN extension */ 131 const eIMAPCapabilityFlag kHasStartTLSCapability = 0x00400000; /* STARTTLS support */ 132 const eIMAPCapabilityFlag kHasAuthNoneCapability = 0x00800000; /* needs no login */ 133 const eIMAPCapabilityFlag kHasAuthGssApiCapability = 0x01000000; /* GSSAPI AUTH */ 134 const eIMAPCapabilityFlag kHasCondStoreCapability = 0x02000000; /* RFC 3551 CondStore extension */ 135 const eIMAPCapabilityFlag kHasEnableCapability = 0x04000000; /* RFC 5161 ENABLE extension */ 136 const eIMAPCapabilityFlag kHasXListCapability = 0x08000000; /* XLIST extension */ 137 const eIMAPCapabilityFlag kHasCompressDeflateCapability = 0x10000000; /* RFC 4978 COMPRESS extension */ 138 const eIMAPCapabilityFlag kHasAuthExternalCapability = 0x20000000; /* RFC 2222 SASL AUTH EXTERNAL */ 139 const eIMAPCapabilityFlag kHasMoveCapability = 0x40000000; /* Proposed MOVE RFC */ 140 const eIMAPCapabilityFlag kHasHighestModSeqCapability = 0x80000000; /* Subset of RFC 3551 */ 141 // above are 32bit; below start the uint64_t bits 33-64 142 const eIMAPCapabilityFlag kHasListExtendedCapability = 0x100000000LL; /* RFC 5258 */ 143 const eIMAPCapabilityFlag kHasSpecialUseCapability = 0x200000000LL; /* RFC 6154: Sent, Draft etc. folders */ 144 const eIMAPCapabilityFlag kGmailImapCapability = 0x400000000LL; /* X-GM-EXT-1 capability extension for gmail */ 145 const eIMAPCapabilityFlag kHasXOAuth2Capability = 0x800000000LL; /* AUTH XOAUTH2 extension */ 146 const eIMAPCapabilityFlag kHasClientIDCapability = 0x1000000000LL; /* ClientID capability */ 147 const eIMAPCapabilityFlag kHasUTF8AcceptCapability = 0x2000000000LL; /* RFC 6855: UTF8=ACCEPT */ 148 149 150 // this used to be part of the connection object class - maybe we should move it into 151 // something similar 152 typedef enum { 153 kEveryThingRFC822, 154 kEveryThingRFC822Peek, 155 kHeadersRFC822andUid, 156 kUid, 157 kFlags, 158 kRFC822Size, 159 kRFC822HeadersOnly, 160 kMIMEPart, 161 kMIMEHeader, 162 kBodyStart 163 } nsIMAPeFetchFields; 164 165 typedef struct _utf_name_struct { 166 bool toUtf7Imap; 167 unsigned char *sourceString; 168 unsigned char *convertedString; 169 } utf_name_struct; 170 171 typedef struct _ProgressInfo { 172 char16_t *message; 173 int32_t currentProgress; 174 int32_t maxProgress; 175 } ProgressInfo; 176 177 typedef enum { 178 eContinue, 179 eContinueNew, 180 eListMyChildren, 181 eNewServerDirectory, 182 eCancelled 183 } EMailboxDiscoverStatus; 184 185 typedef enum { 186 kInvalidateQuota, 187 kStoreQuota, 188 kValidateQuota 189 } nsImapQuotaAction; 190 191 #endif 192 // clang-format on 193