|
|
|
//=============================================================================
|
|
|
|
// File: basicmsg.cpp
|
|
|
|
// Contents: Definitions for BasicMessage
|
|
|
|
// 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 CONSETQUENTIAL 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.
|
|
|
|
//
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
#include <assert.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include "basicmsg.h"
|
|
|
|
|
|
|
|
|
|
|
|
BasicMessage::BasicMessage()
|
|
|
|
{
|
|
|
|
mMessage = DwMessage::NewMessage(mEmptyString, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
BasicMessage::BasicMessage(DwMessage* aMsg)
|
|
|
|
{
|
|
|
|
mMessage = aMsg;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
BasicMessage::~BasicMessage()
|
|
|
|
{
|
|
|
|
if (mMessage != 0) {
|
|
|
|
delete mMessage;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BasicMessage::TakeMessage(DwMessage* aMsg)
|
|
|
|
{
|
|
|
|
// Delete the old DwMessage
|
|
|
|
|
|
|
|
if (mMessage) {
|
|
|
|
delete mMessage;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Assign the new DwMessage
|
|
|
|
|
|
|
|
mMessage = aMsg;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const DwString& BasicMessage::AsString()
|
|
|
|
{
|
|
|
|
// Assemble the DwMessage
|
|
|
|
|
|
|
|
mMessage->Assemble();
|
|
|
|
|
|
|
|
// Return its string contents
|
|
|
|
|
|
|
|
return mMessage->AsString();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BasicMessage::SetAutomaticFields()
|
|
|
|
{
|
|
|
|
DwHeaders& headers = mMessage->Headers();
|
|
|
|
headers.MimeVersion().FromString("1.0");
|
|
|
|
headers.MessageId().CreateDefault();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const DwString& BasicMessage::DateStr() const
|
|
|
|
{
|
|
|
|
// Access the 'Date' header field and return its contents as a string
|
|
|
|
|
|
|
|
DwHeaders& headers = mMessage->Headers();
|
|
|
|
if (headers.HasDate()) {
|
|
|
|
return headers.Date().AsString();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return mEmptyString;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DwUint32 BasicMessage::Date() const
|
|
|
|
{
|
|
|
|
// Access the 'Date' header field and return its contents as a UNIX
|
|
|
|
// time (i.e. POSIX time)
|
|
|
|
|
|
|
|
DwHeaders& headers = mMessage->Headers();
|
|
|
|
if (headers.HasDate()) {
|
|
|
|
return headers.Date().AsUnixTime();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return (DwUint32) -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BasicMessage::SetDate(DwUint32 aUnixTime)
|
|
|
|
{
|
|
|
|
// Access the 'Date' header field and set its contents from a UNIX
|
|
|
|
// time (i.e. POSIX time)
|
|
|
|
|
|
|
|
mMessage->Headers().Date().FromUnixTime(aUnixTime);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const DwString& BasicMessage::To() const
|
|
|
|
{
|
|
|
|
// Access the 'To' header field and return its contents as a string
|
|
|
|
|
|
|
|
DwHeaders& headers = mMessage->Headers();
|
|
|
|
if (headers.HasTo()) {
|
|
|
|
return headers.To().AsString();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return mEmptyString;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BasicMessage::SetTo(const DwString& aStr)
|
|
|
|
{
|
|
|
|
// Access the 'To' header field and set its contents from a string
|
|
|
|
|
|
|
|
mMessage->Headers().To().FromString(aStr);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const DwString& BasicMessage::Cc() const
|
|
|
|
{
|
|
|
|
// Access the 'Cc' header field and return its contents as a string
|
|
|
|
|
|
|
|
DwHeaders& headers = mMessage->Headers();
|
|
|
|
if (headers.HasCc()) {
|
|
|
|
return headers.Cc().AsString();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return mEmptyString;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BasicMessage::SetCc(const DwString& aStr)
|
|
|
|
{
|
|
|
|
// Access the 'Cc' header field and set its contents from a string
|
|
|
|
|
|
|
|
mMessage->Headers().Cc().FromString(aStr);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const DwString& BasicMessage::Bcc() const
|
|
|
|
{
|
|
|
|
// Access the 'Bcc' header field and return its contents as a string
|
|
|
|
|
|
|
|
DwHeaders& headers = mMessage->Headers();
|
|
|
|
if (headers.HasBcc()) {
|
|
|
|
return headers.Bcc().AsString();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return mEmptyString;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BasicMessage::SetBcc(const DwString& aStr)
|
|
|
|
{
|
|
|
|
// Access the 'Bcc' header field and set its contents from a string
|
|
|
|
|
|
|
|
mMessage->Headers().Bcc().FromString(aStr);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const DwString& BasicMessage::From() const
|
|
|
|
{
|
|
|
|
// Access the 'From' header field and return its contents as a string
|
|
|
|
|
|
|
|
DwHeaders& headers = mMessage->Headers();
|
|
|
|
if (headers.HasFrom()) {
|
|
|
|
return headers.From().AsString();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return mEmptyString;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BasicMessage::SetFrom(const DwString& aStr)
|
|
|
|
{
|
|
|
|
// Access the 'From' header field and set its contents from a string
|
|
|
|
|
|
|
|
mMessage->Headers().From().FromString(aStr);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const DwString& BasicMessage::Subject() const
|
|
|
|
{
|
|
|
|
// Access the 'Subject' header field and return its contents as a string
|
|
|
|
|
|
|
|
DwHeaders& headers = mMessage->Headers();
|
|
|
|
if (headers.HasSubject()) {
|
|
|
|
return headers.Subject().AsString();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return mEmptyString;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BasicMessage::SetSubject(const DwString& aStr)
|
|
|
|
{
|
|
|
|
// Access the 'Subject' header field and set its contents from a string
|
|
|
|
|
|
|
|
mMessage->Headers().Subject().FromString(aStr);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const DwString& BasicMessage::TypeStr() const
|
|
|
|
{
|
|
|
|
// Access the 'Content-Type' header field and return its 'type'
|
|
|
|
// as a string
|
|
|
|
|
|
|
|
DwHeaders& headers = mMessage->Headers();
|
|
|
|
if (headers.HasContentType()) {
|
|
|
|
return headers.ContentType().TypeStr();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return mEmptyString;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int BasicMessage::Type() const
|
|
|
|
{
|
|
|
|
// Access the 'Content-Type' header field and return its 'type'
|
|
|
|
// as an enumerated type
|
|
|
|
|
|
|
|
DwHeaders& headers = mMessage->Headers();
|
|
|
|
if (headers.HasContentType()) {
|
|
|
|
return headers.ContentType().Type();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return DwMime::kTypeNull;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BasicMessage::SetTypeStr(const DwString& aStr)
|
|
|
|
{
|
|
|
|
// Access the 'Content-Type' header field and set its 'type'
|
|
|
|
// from a string
|
|
|
|
|
|
|
|
mMessage->Headers().ContentType().SetTypeStr(aStr);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BasicMessage::SetType(int aType)
|
|
|
|
{
|
|
|
|
// Access the 'Content-Type' header field and set its 'type'
|
|
|
|
// from an enumerated type
|
|
|
|
|
|
|
|
mMessage->Headers().ContentType().SetType(aType);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const DwString& BasicMessage::SubtypeStr() const
|
|
|
|
{
|
|
|
|
// Access the 'Content-Type' header field and return its 'subtype'
|
|
|
|
// as a string
|
|
|
|
|
|
|
|
DwHeaders& headers = mMessage->Headers();
|
|
|
|
if (headers.HasContentType()) {
|
|
|
|
return headers.ContentType().SubtypeStr();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return mEmptyString;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int BasicMessage::Subtype() const
|
|
|
|
{
|
|
|
|
// Access the 'Content-Type' header field and return its 'subtype'
|
|
|
|
// as an enumerated type
|
|
|
|
|
|
|
|
DwHeaders& headers = mMessage->Headers();
|
|
|
|
if (headers.HasContentType()) {
|
|
|
|
return headers.ContentType().Subtype();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return DwMime::kSubtypeNull;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BasicMessage::SetSubtypeStr(const DwString& aStr)
|
|
|
|
{
|
|
|
|
// Access the 'Content-Type' header field and set its 'subtype'
|
|
|
|
// from a string
|
|
|
|
|
|
|
|
mMessage->Headers().ContentType().SetSubtypeStr(aStr);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BasicMessage::SetSubtype(int aSubtype)
|
|
|
|
{
|
|
|
|
// Access the 'Content-Type' header field and set its 'subtype'
|
|
|
|
// from an enumerated type
|
|
|
|
|
|
|
|
mMessage->Headers().ContentType().SetSubtype(aSubtype);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const DwString& BasicMessage::ContentTransferEncodingStr() const
|
|
|
|
{
|
|
|
|
// Access the 'Content-Transfer-Encoding' header field and return
|
|
|
|
// its contents as a string
|
|
|
|
|
|
|
|
DwHeaders& headers = mMessage->Headers();
|
|
|
|
if (headers.HasContentTransferEncoding()) {
|
|
|
|
return headers.ContentTransferEncoding().AsString();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return mEmptyString;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int BasicMessage::ContentTransferEncoding() const
|
|
|
|
{
|
|
|
|
// Access the 'Content-Transfer-Encoding' header field and return
|
|
|
|
// its contents as an enumerated type
|
|
|
|
|
|
|
|
DwHeaders& headers = mMessage->Headers();
|
|
|
|
if (headers.HasContentTransferEncoding()) {
|
|
|
|
return headers.ContentTransferEncoding().AsEnum();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return DwMime::kCteNull;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BasicMessage::SetContentTransferEncodingStr(const DwString& aStr)
|
|
|
|
{
|
|
|
|
// Access the 'Content-Transfer-Encoding' header field and set
|
|
|
|
// its contents from a string
|
|
|
|
|
|
|
|
mMessage->Headers().ContentTransferEncoding().FromString(aStr);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BasicMessage::SetContentTransferEncoding(int aCte)
|
|
|
|
{
|
|
|
|
// Access the 'Content-Transfer-Encoding' header field and set
|
|
|
|
// its contents from an enumerated type
|
|
|
|
|
|
|
|
mMessage->Headers().ContentTransferEncoding().FromEnum(aCte);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const DwString& BasicMessage::CteStr() const
|
|
|
|
{
|
|
|
|
// Access the 'Content-Transfer-Encoding' header field and return
|
|
|
|
// its contents as a string
|
|
|
|
|
|
|
|
DwHeaders& headers = mMessage->Headers();
|
|
|
|
if (headers.HasContentTransferEncoding()) {
|
|
|
|
return headers.ContentTransferEncoding().AsString();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return mEmptyString;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int BasicMessage::Cte() const
|
|
|
|
{
|
|
|
|
// Access the 'Content-Transfer-Encoding' header field and return
|
|
|
|
// its contents as an enumerated type
|
|
|
|
|
|
|
|
DwHeaders& headers = mMessage->Headers();
|
|
|
|
if (headers.HasContentTransferEncoding()) {
|
|
|
|
return headers.ContentTransferEncoding().AsEnum();
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return DwMime::kCteNull;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BasicMessage::SetCteStr(const DwString& aStr)
|
|
|
|
{
|
|
|
|
// Access the 'Content-Transfer-Encoding' header field and set
|
|
|
|
// its contents from a string
|
|
|
|
|
|
|
|
mMessage->Headers().ContentTransferEncoding().FromString(aStr);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BasicMessage::SetCte(int aCte)
|
|
|
|
{
|
|
|
|
// Access the 'Content-Transfer-Encoding' header field and set
|
|
|
|
// its contents from an enumerated type
|
|
|
|
|
|
|
|
mMessage->Headers().ContentTransferEncoding().FromEnum(aCte);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const DwString& BasicMessage::Body() const
|
|
|
|
{
|
|
|
|
// Access the message body and return its contents as a string
|
|
|
|
|
|
|
|
const DwString& body = mMessage->Body().AsString();
|
|
|
|
return body;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void BasicMessage::SetBody(const DwString& aStr)
|
|
|
|
{
|
|
|
|
// Access the message body and set its contents from a string
|
|
|
|
|
|
|
|
mMessage->Body().FromString(aStr);
|
|
|
|
}
|
|
|
|
|
|
|
|
|