You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdepim/mimelib/dw_mime.cpp

471 lines
12 KiB

//=============================================================================
// File: dw_mime.cpp
// Contents: Various functions
// Maintainer: Doug Sauder <dwsauder@fwb.gulf.net>
// 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 <mimelib/config.h>
#include <mimelib/debug.h>
#include <mimelib/string.h>
#include <mimelib/msgcmp.h>
#include <mimelib/enum.h>
#include <mimelib/utility.h>
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;
}
}