示例#1
0
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;
}
示例#2
0
void DwDispositionType::StrToEnum()
{
    switch(mDispositionTypeStr[0])
    {
        case 'i':
            if(DwStrcasecmp(mDispositionTypeStr, "inline") == 0)
            {
                mDispositionType = DwMime::kDispTypeInline;
            }
            else
            {
                mDispositionType = DwMime::kDispTypeUnknown;
            }
            break;
        case 'a':
            if(DwStrcasecmp(mDispositionTypeStr, "attachment") == 0)
            {
                mDispositionType = DwMime::kDispTypeAttachment;
            }
            else
            {
                mDispositionType = DwMime::kDispTypeUnknown;
            }
            break;
    }
}
示例#3
0
void DwHeaders::AddOrReplaceField(DwField* aField)
{
    assert(aField != 0);
    if (aField == 0) return;
    SetModified();
    const DwString& fieldName = aField->FieldNameStr();
    DwField* prevField = 0;
    DwField* field = mFirstField;
    while (field) {
        if (DwStrcasecmp(field->FieldNameStr(), fieldName) == 0) {
            break;
        }
        prevField = field;
        field = field->Next();
    }
    // Field was not found, so just add it
    if (!field) {
        _AddField(aField);
    }
    // Field was found. Replace the old one with the new one.
    else {
        if (prevField) {
            prevField->SetNext(aField);
        }
        else {
            mFirstField = aField;
        }
        aField->SetNext(field->Next());
        delete field;
    }
}
示例#4
0
bool Twinamp2dspDll::isMultichannelAllowed(const char_t *compList) const
{
    strings multichannelDlls;
    strtok(compList, _l(";"), multichannelDlls);
    for (strings::const_iterator b = multichannelDlls.begin(); b != multichannelDlls.end(); b++)
        if (DwStrcasecmp(*b, dllFileName) == 0) {
            return true;
        }
    return false;
}
示例#5
0
DwField* DwHeaders::FindField(const DwString& aFieldName) const
{
    DwField* field = mFirstField;
    while (field) {
        if (DwStrcasecmp(field->FieldNameStr(), aFieldName) == 0) {
            break;
        }
        field = field->Next();
    }
    return field;
}
示例#6
0
DwField* DwHeaders::FindField(const char* aFieldName) const
{
    assert(aFieldName != 0);
    if (aFieldName == 0) return 0;
    DwField* field = mFirstField;
    while (field) {
        if (DwStrcasecmp(field->FieldNameStr(), aFieldName) == 0) {
            break;
        }
        field = field->Next();
    }
    return field;
}
示例#7
0
void DwParameter::Parse()   
{
    mIsModified = 0;
    mAttribute = mValue = "";
    if (mString.length() == 0) return;
    DwRfc1521Tokenizer tokenizer(mString);
    // Get attribute
    int found = 0;
    while (!found && tokenizer.Type() != eTkNull) {
        if (tokenizer.Type() == eTkToken) {
            mAttribute = tokenizer.Token();
            found = 1;
        }
        ++tokenizer;
    }
    // Get '='
    found = 0;
    while (!found && tokenizer.Type() != eTkNull) {
        if (tokenizer.Type() == eTkTspecial
            && tokenizer.Token()[0] == '=') {
            found = 1;
        }
        ++tokenizer;
    }
    // Get value
    found = 0;
    while (!found && tokenizer.Type() != eTkNull) {
        if (tokenizer.Type() == eTkToken) {
            mValue = tokenizer.Token();
            found = 1;
        }
        else if (tokenizer.Type() == eTkQuotedString) {
            tokenizer.StripDelimiters();
            mValue = tokenizer.Token();
            found = 1;
        }
        ++tokenizer;
    }
    // Some nonstandard MIME implementations use single quotes to quote
    // the boundary string.  This is incorrect, but we will try to detect
    // it and work with it.
    //
	// If the first character and last character of the boundary string
    // are single quote, strip them off.
    if (DwStrcasecmp(mAttribute, "boundary") == 0) {
        size_t len = mValue.length();
        if (len > 2 && mValue[0] == '\'' && mValue[len-1] == '\'') {
            mValue = mValue.substr(1, len-2);
        }
    }
}
示例#8
0
void DwMechanism::StringToEnum()
{
    if (mString.length() == 0) {
        mCteEnum = DwMime::kCteNull;
    return;
    }
    int ch = mString[0];
    switch (ch) {
    case '7':
        if (DwStrcasecmp(mString, "7bit") == 0) {
            mCteEnum = DwMime::kCte7bit;
        }
        break;
    case '8':
        if (DwStrcasecmp(mString, "8bit") == 0) {
            mCteEnum = DwMime::kCte8bit;
        }
        break;
    case 'B':
    case 'b':
        if (DwStrcasecmp(mString, "base64") == 0) {
            mCteEnum = DwMime::kCteBase64;
        }
        else if (DwStrcasecmp(mString, "binary") == 0) {
            mCteEnum = DwMime::kCteBinary;
        }
        break;
    case 'Q':
    case 'q':
        if (DwStrcasecmp(mString, "quoted-printable") == 0) {
            mCteEnum = DwMime::kCteQuotedPrintable;
        }
        break;
    default:
        mCteEnum = DwMime::kCteUnknown;
        break;
    }
}
示例#9
0
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;
}
示例#10
0
const DwString &DwDispositionType::Filename() const
{
    DwParameter *param = mFirstParameter;
    while(param)
    {
        if(DwStrcasecmp(param->Attribute(), "filename") == 0)
        {
            // Filename parameter found. Return its value.
            // Implementation note: this member function is const, which
            // forbids us from assigning to mFilenameStr.  The following
            // trick gets around this.  (ANSI implementations could use the
            // "mutable" declaration).
            DwDispositionType *_this = (DwDispositionType *) this;
            _this->mFilenameStr = param->Value();
            break;
        }
        param = param->Next();
    }
    return mFilenameStr;
}
示例#11
0
void DwDispositionType::SetFilename(const DwString &aStr)
{
    mFilenameStr = aStr;
    // Search for filename parameter in parameter list.  If found, set its
    // value.
    DwParameter *param = mFirstParameter;
    while(param)
    {
        if(DwStrcasecmp(param->Attribute(), "filename") == 0)
        {
            param->SetValue(mFilenameStr);
            return;
        }
        param = param->Next();
    }
    // Boundary parameter not found. Add it.
    param = DwParameter::NewParameter("", 0);
    param->SetAttribute("Filename");
    param->SetValue(aStr);
    AddParameter(param);
}
示例#12
0
int DwSubtypeStrToEnum(const DwString& aStr)
{
    if (aStr == "") {
        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 'D':
    case 'd':
        if (DwStrcasecmp(aStr, "digest") == 0) {
            type = DwMime::kSubtypeDigest;
        }
        break;
    case 'E':
    case 'e':
        if (DwStrcasecmp(aStr, "enriched") == 0) {
            type = DwMime::kSubtypeEnriched;
        }
        else if (DwStrcasecmp(aStr, "external-body") == 0) {
            type = DwMime::kSubtypeExternalBody;
        }
        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;
        }
        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;
        }
        break;
    case 'R':
    case 'r':
        if (DwStrcasecmp(aStr, "richtext") == 0) {
            type = DwMime::kSubtypeRichtext;
        }
        else if (DwStrcasecmp(aStr, "rfc822") == 0) {
            type = DwMime::kSubtypeRfc822;
        }
        break;
    }
    return type;
}
示例#13
0
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;
}
示例#14
0
DwFieldBody* DwField::_CreateFieldBody(const DwString& aFieldName,
    const DwString& aFieldBody, DwMessageComponent* aParent)
{
    enum {
        kAddressList,
        kDispositionType,
        kDateTime,
        kMailbox,
        kMailboxList,
        kMechanism,
        kMediaType,
        kMsgId,
        kText
    } fieldBodyType;
    // Default field type is 'text'
    fieldBodyType = kText;
    int ch = aFieldName[0];
    ch = tolower(ch);
    switch (ch) {
    case 'b':
        if (DwStrcasecmp(aFieldName, "bcc") == 0) {
            fieldBodyType = kAddressList;
        }
        break;
    case 'c':
        if (DwStrcasecmp(aFieldName, "cc") == 0) {
            fieldBodyType = kAddressList;
        }
        else if (DwStrcasecmp(aFieldName, "content-id") == 0) {
            fieldBodyType = kMsgId;
        }
        else if (DwStrcasecmp(aFieldName, "content-transfer-encoding") == 0) {
            fieldBodyType = kMechanism;
        }
        else if (DwStrcasecmp(aFieldName, "content-type") == 0) {
            fieldBodyType = kMediaType;
        }
        else if (DwStrcasecmp(aFieldName, "content-disposition") == 0) {
            fieldBodyType = kDispositionType;
        }
        break;
    case 'd':
        if (DwStrcasecmp(aFieldName, "date") == 0) {
            fieldBodyType = kDateTime;
        }
        break;
    case 'f':
        if (DwStrcasecmp(aFieldName, "from") == 0) {
            fieldBodyType = kMailboxList;
        }
        break;
    case 'm':
        if (DwStrcasecmp(aFieldName, "message-id") == 0) {
            fieldBodyType = kMsgId;
        }
        break;
    case 'r':
        if (DwStrcasecmp(aFieldName, "reply-to") == 0) {
            fieldBodyType = kAddressList;
        }
        else if (DwStrcasecmp(aFieldName, "resent-bcc") == 0) {
            fieldBodyType = kAddressList;
        }
        else if (DwStrcasecmp(aFieldName, "resent-cc") == 0) {
            fieldBodyType = kAddressList;
        }
        else if (DwStrcasecmp(aFieldName, "resent-date") == 0) {
            fieldBodyType = kDateTime;
        }
        else if (DwStrcasecmp(aFieldName, "resent-from") == 0) {
            fieldBodyType = kMailboxList;
        }
        else if (DwStrcasecmp(aFieldName, "resent-message-id") == 0) {
            fieldBodyType = kMsgId;
        }
        else if (DwStrcasecmp(aFieldName, "resent-reply-to") == 0) {
            fieldBodyType = kAddressList;
        }
        else if (DwStrcasecmp(aFieldName, "resent-sender") == 0) {
            fieldBodyType = kMailbox;
        }
        else if (DwStrcasecmp(aFieldName, "return-path") == 0) {
            fieldBodyType = kMailbox;
        }
        break;
    case 's':
        if (DwStrcasecmp(aFieldName, "sender") == 0) {
            fieldBodyType = kMailbox;
        }
        break;
    case 't':
        if (DwStrcasecmp(aFieldName, "to") == 0) {
            fieldBodyType = kAddressList;
        }
        break;
    }
    DwFieldBody* fieldBody;
    switch (fieldBodyType) {
    case kAddressList:
        fieldBody = DwAddressList::NewAddressList(aFieldBody, aParent);
        break;
    case kDispositionType:
        fieldBody = DwDispositionType::NewDispositionType(aFieldBody, aParent);
        break;
    case kMediaType:
        fieldBody = DwMediaType::NewMediaType(aFieldBody, aParent);
        break;
    case kMechanism:
        fieldBody = DwMechanism::NewMechanism(aFieldBody, aParent);
        break;
    case kDateTime:
        fieldBody = DwDateTime::NewDateTime(aFieldBody, aParent);
        break;
    case kMailbox:
        fieldBody = DwMailbox::NewMailbox(aFieldBody, aParent);
        break;
    case kMailboxList:
        fieldBody = DwMailboxList::NewMailboxList(aFieldBody, aParent);
        break;
    case kMsgId:
        fieldBody = DwMsgId::NewMsgId(aFieldBody, aParent);
        break;
    case kText:
    default:
        fieldBody = DwText::NewText(aFieldBody, aParent);
        break;
    }
    return fieldBody;
}