//============================================================================= // File: dw_mime.cpp // Contents: Various functions // Maintainer: Doug Sauder // WWW: http://www.fwb.gulf.net/~dwsauder/mimepp.html // // Copyright (c) 1996, 1997 Douglas W. Sauder // All rights reserved. // // IN NO EVENT SHALL DOUGLAS W. SAUDER BE LIABLE TO ANY PARTY FOR DIRECT, // INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF // THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF DOUGLAS W. SAUDER // HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // DOUGLAS W. SAUDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT // NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" // BASIS, AND DOUGLAS W. SAUDER HAS NO OBLIGATION TO PROVIDE MAINTENANCE, // SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. // //============================================================================= #define DW_IMPLEMENTATION #include #include #include #include #include #include void DwInitialize() { } void DwFinalize() { } int DwCteStrToEnum(const DwString& aStr) { int cte = DwMime::kCteUnknown; int ch = aStr[0]; switch (ch) { case '7': if( DwStrcasecmp(aStr, "7bit") == 0 ) { cte = DwMime::kCte7bit; } break; case '8': if (DwStrcasecmp(aStr, "8bit") == 0) { cte = DwMime::kCte8bit; } break; case 'B': case 'b': if (DwStrcasecmp(aStr, "base64") == 0) { cte = DwMime::kCteBase64; } else if (DwStrcasecmp(aStr, "binary") == 0) { cte = DwMime::kCteBinary; } break; case 'Q': case 'q': if (DwStrcasecmp(aStr, "quoted-printable") == 0) { cte = DwMime::kCteQuotedPrintable; } break; } return cte; } void DwCteEnumToStr(int aEnum, DwString& aStr) { switch (aEnum) { case DwMime::kCte7bit: aStr = "7bit"; break; case DwMime::kCte8bit: aStr = "8bit"; break; case DwMime::kCteBinary: aStr = "binary"; break; case DwMime::kCteBase64: aStr = "base64"; break; case DwMime::kCteQuotedPrintable: aStr = "quoted-printable"; break; } } int DwTypeStrToEnum(const DwString& aStr) { int type = DwMime::kTypeUnknown; int ch = aStr[0]; switch (ch) { case 'A': case 'a': if (DwStrcasecmp(aStr, "application") == 0) { type = DwMime::kTypeApplication; } else if (DwStrcasecmp(aStr, "audio") == 0) { type = DwMime::kTypeAudio; } break; case 'I': case 'i': if (DwStrcasecmp(aStr, "image") == 0) { type = DwMime::kTypeImage; } break; case 'M': case 'm': if (DwStrcasecmp(aStr, "message") == 0) { type = DwMime::kTypeMessage; } else if (DwStrcasecmp(aStr, "multipart") == 0) { type = DwMime::kTypeMultipart; } break; case 'T': case 't': if (DwStrcasecmp(aStr, "text") == 0) { type = DwMime::kTypeText; } break; case 'V': case 'v': if (DwStrcasecmp(aStr, "video") == 0) { type = DwMime::kTypeVideo; } break; case 0: type = DwMime::kTypeNull; break; } return type; } void DwTypeEnumToStr(int aEnum, DwString& aStr) { switch (aEnum) { case DwMime::kTypeNull: aStr = ""; break; case DwMime::kTypeUnknown: default: aStr = "Unknown"; break; case DwMime::kTypeText: aStr = "Text"; break; case DwMime::kTypeMultipart: aStr = "Multipart"; break; case DwMime::kTypeMessage: aStr = "Message"; break; case DwMime::kTypeApplication: aStr = "Application"; break; case DwMime::kTypeImage: aStr = "Image"; break; case DwMime::kTypeAudio: aStr = "Audio"; break; case DwMime::kTypeVideo: aStr = "Video"; break; case DwMime::kTypeModel: aStr = "Model"; break; } } int DwSubtypeStrToEnum(const DwString& aStr) { if (aStr.empty()) { return DwMime::kSubtypeNull; } int type = DwMime::kSubtypeUnknown; int ch = aStr[0]; switch (ch) { case 'A': case 'a': if (DwStrcasecmp(aStr, "alternative") == 0) { type = DwMime::kSubtypeAlternative; } break; case 'B': case 'b': if (DwStrcasecmp(aStr, "basic") == 0) { type = DwMime::kSubtypeBasic; } break; case 'C': case 'c': if (DwStrcasecmp(aStr, "calendar") == 0) { type = DwMime::kSubtypeVCal; } break; case 'D': case 'd': if (DwStrcasecmp(aStr, "digest") == 0) { type = DwMime::kSubtypeDigest; } if (DwStrcasecmp(aStr, "directory") == 0) { type = DwMime::kSubtypeDirectory; } else if (DwStrcasecmp(aStr, "disposition-notification") == 0 ) { type = DwMime::kSubtypeDispositionNotification; } break; case 'E': case 'e': if (DwStrcasecmp(aStr, "enriched") == 0) { type = DwMime::kSubtypeEnriched; } else if (DwStrcasecmp(aStr, "external-body") == 0) { type = DwMime::kSubtypeExternalBody; } else if (DwStrcasecmp(aStr, "encrypted") == 0) { type = DwMime::kSubtypeEncrypted; } break; case 'G': case 'g': if (DwStrcasecmp(aStr, "gif") == 0) { type = DwMime::kSubtypeGif; } break; case 'H': case 'h': if (DwStrcasecmp(aStr, "html") == 0) { type = DwMime::kSubtypeHtml; } break; case 'J': case 'j': if (DwStrcasecmp(aStr, "jpeg") == 0) { type = DwMime::kSubtypeJpeg; } break; case 'M': case 'm': if (DwStrcasecmp(aStr, "mixed") == 0) { type = DwMime::kSubtypeMixed; } else if (DwStrcasecmp(aStr, "mpeg") == 0) { type = DwMime::kSubtypeMpeg; } else if (DwStrcasecmp(aStr, "ms-tnef") == 0) { type = DwMime::kSubtypeMsTNEF; } break; case 'O': case 'o': if (DwStrcasecmp(aStr, "octet-stream") == 0) { type = DwMime::kSubtypeOctetStream; } break; case 'P': case 'p': if (DwStrcasecmp(aStr, "plain") == 0) { type = DwMime::kSubtypePlain; } else if (DwStrcasecmp(aStr, "parallel") == 0) { type = DwMime::kSubtypeParallel; } else if (DwStrcasecmp(aStr, "partial") == 0) { type = DwMime::kSubtypePartial; } else if (DwStrcasecmp(aStr, "postscript") == 0) { type = DwMime::kSubtypePostscript; } else if (DwStrcasecmp(aStr, "pgp-signature") == 0) { type = DwMime::kSubtypePgpSignature; } else if (DwStrcasecmp(aStr, "pgp-encrypted") == 0) { type = DwMime::kSubtypePgpEncrypted; } else if (DwStrcasecmp(aStr, "pgp") == 0) { type = DwMime::kSubtypePgpClearsigned; } else if (DwStrcasecmp(aStr, "pkcs7-signature") == 0) { type = DwMime::kSubtypePkcs7Signature; } else if (DwStrcasecmp(aStr, "pkcs7-mime") == 0) { type = DwMime::kSubtypePkcs7Mime; } break; case 'R': case 'r': if (DwStrcasecmp(aStr, "richtext") == 0) { type = DwMime::kSubtypeRichtext; } else if (DwStrcasecmp(aStr, "rfc822") == 0) { type = DwMime::kSubtypeRfc822; } else if (DwStrcasecmp(aStr, "report") == 0) { type = DwMime::kSubtypeReport; } else if (DwStrcasecmp(aStr, "rtf") == 0) { type = DwMime::kSubtypeRtf; } else if (DwStrcasecmp(aStr, "related") == 0) { type = DwMime::kSubtypeRelated; } break; case 'S': case 's': if (DwStrcasecmp(aStr, "signed") == 0) { type = DwMime::kSubtypeSigned; } break; case 'V': case 'v': if (DwStrcasecmp(aStr, "vnd.de.bund.bsi.chiasmus-text") == 0) { type = DwMime::kSubtypeChiasmusText; } break; case 'X': case 'x': if (DwStrcasecmp(aStr, "x-vcard") == 0) { type = DwMime::kSubtypeXVCard; } else if (DwStrcasecmp(aStr, "x-pkcs7-signature") == 0) { type = DwMime::kSubtypePkcs7Signature; } else if (DwStrcasecmp(aStr, "x-pkcs7-mime") == 0) { type = DwMime::kSubtypePkcs7Mime; } if (DwStrcasecmp(aStr, "x-diff") == 0) { type = DwMime::kSubtypeXDiff; } if (DwStrcasecmp(aStr, "x-vcalendar") == 0) { type = DwMime::kSubtypeVCal; } break; } return type; } void DwSubtypeEnumToStr(int aEnum, DwString& aStr) { switch (aEnum) { case DwMime::kSubtypeNull: aStr = ""; break; case DwMime::kSubtypeUnknown: default: aStr = "Unknown"; break; case DwMime::kSubtypePlain: aStr = "Plain"; break; case DwMime::kSubtypeRichtext: aStr = "Richtext"; break; case DwMime::kSubtypeEnriched: aStr = "Enriched"; break; case DwMime::kSubtypeHtml: aStr = "HTML"; break; case DwMime::kSubtypeVCal: aStr = "Calendar"; break; case DwMime::kSubtypeXVCard: aStr = "X-VCard"; break; case DwMime::kSubtypeDirectory: aStr = "Directory"; break; case DwMime::kSubtypeXDiff: aStr = "X-Diff"; break; case DwMime::kSubtypeRtf: aStr = "RTF"; break; case DwMime::kSubtypeMixed: aStr = "Mixed"; break; case DwMime::kSubtypeSigned: aStr = "Signed"; break; case DwMime::kSubtypeEncrypted: aStr = "Encrypted"; break; case DwMime::kSubtypeAlternative: aStr = "Alternative"; break; case DwMime::kSubtypeDigest: aStr = "Digest"; break; case DwMime::kSubtypeParallel: aStr = "Parallel"; break; case DwMime::kSubtypeReport: aStr = "report"; break; case DwMime::kSubtypeRelated: aStr = "Related"; break; case DwMime::kSubtypeRfc822: aStr = "Rfc822"; break; case DwMime::kSubtypeDispositionNotification: aStr = "disposition-notification"; break; case DwMime::kSubtypePartial: aStr = "Partial"; break; case DwMime::kSubtypeExternalBody: aStr = "External-body"; break; case DwMime::kSubtypePostscript: aStr = "Postscript"; break; case DwMime::kSubtypeOctetStream: aStr = "Octet-stream"; break; case DwMime::kSubtypePgpSignature: aStr = "pgp-signature"; break; case DwMime::kSubtypePgpEncrypted: aStr = "pgp-encrypted"; break; case DwMime::kSubtypePgpClearsigned: aStr = "pgp"; break; case DwMime::kSubtypePkcs7Signature: aStr = "pkcs7-signature"; break; case DwMime::kSubtypePkcs7Mime: aStr = "pkcs7-mime"; break; case DwMime::kSubtypeMsTNEF: aStr = "ms-tnef"; break; case DwMime::kSubtypeChiasmusText: aStr = "vnd.de.bund.bsi.chiasmus-text"; break; case DwMime::kSubtypeJpeg: aStr = "jpeg"; break; case DwMime::kSubtypeGif: aStr = "gif"; break; case DwMime::kSubtypeBasic: aStr = "basic"; break; case DwMime::kSubtypeMpeg: aStr = "mpeg"; break; } }