email/imap4mtm/imapsession/src/cimapenvelope.cpp
changeset 0 72b543305e3a
--- /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" <mailbox@host>
+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" <mailbox@host>
+		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;
+	}