diff -r 000000000000 -r 72b543305e3a email/imap4mtm/imapsession/src/cimapenvelope.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/imap4mtm/imapsession/src/cimapenvelope.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,282 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include "cimapenvelope.h" + + +_LIT8(KTxtFormatAddressPlain, "%S@%S"); +const TInt KFormatCharsAddressPlain = 4; // %S%S + +_LIT8(KTxtFormatAddressWithName, "\"%S\" <%S@%S>"); +const TInt KFormatCharsAddressWithName = 6; // %S%S%S + +CImapEnvelope* CImapEnvelope::NewL() +// static method +// There is no non-trivial construction required, so no need for a ConstructL() + { + return new(ELeave)CImapEnvelope(); + } + +CImapEnvelope::CImapEnvelope() + {} + +CImapEnvelope::~CImapEnvelope() + { + iEnvFrom.Close(); + iEnvSender.Close(); + iEnvReplyTo.Close(); + iEnvTo.Close(); + iEnvCc.Close(); + iEnvBcc.Close(); + } + +/** +Returns the date field +@return the date field +*/ +EXPORT_C const TDesC8& CImapEnvelope::EnvDate() + { + return iEnvDate; + } +/** +Returns the subject field +@return the subject field +*/ +EXPORT_C const TDesC8& CImapEnvelope::EnvSubject() + { + return iEnvSubject; + } +/** +Returns the array of "from" addresses structures +@return a reference to the array of "from" addresses structures +*/ +EXPORT_C const CImapEnvelope::RArrayTAddress& CImapEnvelope::EnvFrom() + { + return iEnvFrom; + } +/** +Returns the array of "sender" addresses structures +@return a reference to the array of "sender" addresses structures +*/ +EXPORT_C const CImapEnvelope::RArrayTAddress& CImapEnvelope::EnvSender() + { + return iEnvSender; + } +/** +Returns the array of "reply to" addresses structures +@return a reference to the array of "reply to" addresses structures +*/ +EXPORT_C const CImapEnvelope::RArrayTAddress& CImapEnvelope::EnvReplyTo() + { + return iEnvReplyTo; + } +/** +Returns the array of "to" addresses structures +@return a reference to the array of "to" addresses structures +*/ +EXPORT_C const CImapEnvelope::RArrayTAddress& CImapEnvelope::EnvTo() + { + return iEnvTo; + } +/** +Returns the array of "carbon copy" addresses structures +@return a reference to the array of "cc" addresses structures +*/ +EXPORT_C const CImapEnvelope::RArrayTAddress& CImapEnvelope::EnvCc() + { + return iEnvCc; + } +/** +Returns the array of "blind carbon copy" addresses structures +@return a reference to the array of "bcc" addresses structures +*/ +EXPORT_C const CImapEnvelope::RArrayTAddress& CImapEnvelope::EnvBcc() + { + return iEnvBcc; + } +/** +Returns the "in reply to" field +@return the "in reply to" field +*/ +EXPORT_C const TDesC8& CImapEnvelope::EnvInReplyTo() + { + return iEnvInReplyTo; + } +/** +Returns the "message id" field +@return the "message id" field +*/ +EXPORT_C const TDesC8& CImapEnvelope::EnvMessageId() + { + return iEnvMessageId; + } + +/** +Sets the value of the date field +@param aEnvDate the date field +*/ +void CImapEnvelope::SetEnvDate(const TDesC8& aEnvDate) + { + iEnvDate.Set(aEnvDate); + } +/** +Sets the value of the subject field +@param aEnvSubject the subject field +*/ +void CImapEnvelope::SetEnvSubject(const TDesC8& aEnvSubject) + { + iEnvSubject.Set(aEnvSubject); + } +/** +Appends an address structure to the list of from addresses +@param aAddress the address structure that is to be added to the list of from addresses +*/ +void CImapEnvelope::AppendEnvFromL(const TAddress& aAddress) + { + iEnvFrom.AppendL(aAddress); + } +/** +Appends an address structure to the list of sender addresses +@param aAddress the address structure that is to be added to the list of sender addresses +*/ +void CImapEnvelope::AppendEnvSenderL(const TAddress& aAddress) + { + iEnvSender.AppendL(aAddress); + } +/** +Appends an address structure to the list of "reply to" addresses +@param aAddress the address structure that is to be added to the list of "reply to" addresses +*/ +void CImapEnvelope::AppendEnvReplyToL(const TAddress& aAddress) + { + iEnvReplyTo.AppendL(aAddress); + } +/** +Appends an address structure to the list of "to" addresses +@param aAddress the address structure that is to be added to the list of "to" addresses +*/ +void CImapEnvelope::AppendEnvToL(const TAddress& aAddress) + { + iEnvTo.AppendL(aAddress); + } +/** +Appends an address structure to the list of "carbon copy" addresses +@param aAddress the address structure that is to be added to the list of "cc" addresses +*/ +void CImapEnvelope::AppendEnvCcL(const TAddress& aAddress) + { + iEnvCc.AppendL(aAddress); + } +/** +Appends an address structure to the list of "blind carbon copy" addresses +@param aAddress the address structure that is to be added to the list of "bcc" addresses +*/ +void CImapEnvelope::AppendEnvBccL(const TAddress& aAddress) + { + iEnvBcc.AppendL(aAddress); + } +/** +Sets the value of the "in reply to" field +@param aEnvInReplyTo the "in reply to" field +*/ +void CImapEnvelope::SetEnvInReplyTo(const TDesC8& aEnvInReplyTo) + { + iEnvInReplyTo.Set(aEnvInReplyTo); + } +/** +Sets the value of the "message id" field +@param aEnvMessageId the "message id" field +*/ +void CImapEnvelope::SetEnvMessageId(const TDesC8& aEnvMessageId) + { + iEnvMessageId.Set(aEnvMessageId); + } + + +/** +Sets the value of the name field +@param aName the name field +*/ +void CImapEnvelope::TAddress::SetName(const TDesC8& aName) + { + iName.Set(aName); + } +/** +Sets the value of the routing information field. This is known as addr-adl in RFC3501 +@param aAdl the routing information field +*/ +void CImapEnvelope::TAddress::SetAdl(const TDesC8& aAdl) + { + iAdl.Set(aAdl); + } +/** +Sets the value of the mailbox field +@param aMailbox the mailbox field +*/ +void CImapEnvelope::TAddress::SetMailbox(const TDesC8& aMailbox) + { + iMailbox.Set(aMailbox); + } +/** +Sets the value of the host field +@param aHost the host field +*/ +void CImapEnvelope::TAddress::SetHost(const TDesC8& aHost) + { + iHost.Set(aHost); + } + +/** +Constructs an email address string from the constituent fields of the address. +If a name is present, then the string will be of the form + "name" +Otherwise it will be of the form + mailbox@host +The "adl" (routing) field is not included in the address string. +@return a heap string containing the email address. Ownership of this string is transferred to the caller. +*/ +EXPORT_C HBufC16* CImapEnvelope::TAddress::CreateAddressStringL() const + { + // Each part of the address is provided as an 8-bit value, + // So build up the address as an 8-bit string + + HBufC8* address8 = NULL; + + if (iName.Length() == 0) + { + // Use plain address: mailbox@host + TInt length = KTxtFormatAddressPlain().Length() - KFormatCharsAddressPlain + iMailbox.Length() + iHost.Length(); + + address8 = HBufC8::NewLC(length); + address8->Des().Format(KTxtFormatAddressPlain, &iMailbox, &iHost); + } + else + { + // Use address with name: "name" + TInt length = KTxtFormatAddressWithName().Length() - KFormatCharsAddressWithName + iName.Length() + iMailbox.Length() + iHost.Length(); + + address8 = HBufC8::NewLC(length); + address8->Des().Format(KTxtFormatAddressWithName, &iName, &iMailbox, &iHost); + } + + // Now do a single conversion up to 16 bits - by padding each byte with a zero. + // No need to put address16 on the cleanup stack, as there are no leaving methods after it has been created. + HBufC16* address16 = HBufC16::NewL(address8->Length()); + address16->Des().Copy(*address8); + + CleanupStack::PopAndDestroy(address8); + + return address16; + }