mmsengine/inc/cimconvertheader.h
changeset 23 238255e8b033
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsengine/inc/cimconvertheader.h	Fri Apr 16 14:56:15 2010 +0300
@@ -0,0 +1,216 @@
+// Copyright (c) 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:
+// cimconvertheader.h
+//
+/**
+ * @file
+ * @internal
+ * @released
+ */
+
+#if !defined(__CIMCONVERTHEADER_H__)
+#define __CIMCONVERTHEADER_H__
+
+#include <s32buf.h>
+#include <s32stor.h>
+#include <txtrich.h>
+#include <miutatch.h>
+#include <miutconv.h>
+#include <miuthdr.h>
+#include <mentact.h>		// CMsgActive
+
+#include <imcvdata.h>
+#include <imcvtext.h>
+#include <imutdll.h>
+#include <imcvcodc.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS  
+#include "timrfc822datefield.h"	
+#include "cimconvertcharconv.h"				
+#endif
+
+/**
+Maximum length allowed for an 'encoded-word' rfc2047
+@internalComponent
+@released
+*/
+const TInt KEncodedWordMaxLength = 75;
+
+/**
+All encoding information except data and charset name length. =?B?=?    => 7
+@internalComponent
+@released
+*/
+const TInt KMaxEncodedInformationLength = 7;
+
+/**
+Length of the field name, eg "Subject: ". This may change as other fields are processed.
+@internalComponent
+@released
+*/
+const TInt KMaxHeaderFieldNameLength = 12;
+
+/**
+@internalComponent
+@released
+*/
+const TInt KImCvFinished=(-1);
+const TInt KImCvAdvance=(1);
+
+// error states involved in sending attachments etc.
+/**
+@internalComponent
+@deprecated
+*/
+enum TIattErrorCode
+	{
+	KImAttNoError = 0,
+	KImAttFinished = 1
+	};
+
+
+/**
+@internalComponent
+@released
+*/
+enum TImBodyConvAlgorithm
+	{
+	ENoAlgorithm,
+	EQPEncode,
+	EQPDecode,
+	EBase64Encode,
+	EBase64Decode,
+	EUUEncode,
+	EUUDecode
+	};
+	
+// Used in CImSendConvert
+/**
+@internalComponent
+@deprecated
+*/
+enum TImSendEncoding 
+	{ 
+	ESendNoAlgorithm,
+	ESendMimeAlgorithm
+	};	
+
+struct SAttachmentInfo
+/**
+@internalComponent
+@released
+*/
+	{
+	TInt iSize;
+	TFileName iName;
+	TFileName iPath;
+	TBool iComplete;
+	};
+
+class TImCodecB64WithLineBreaks : public TImCodecB64
+/**
+@internalComponent
+@released
+*/
+	{
+public:
+	TInt Encode(const TDesC8& aSrcString, TDes8& rDestString);
+	};
+
+// For converting a text string to/from encoded form
+// Note: 'Word' here has special meaning derived from the one defined in rfc2047.
+// It refers to one encoding instance.
+
+//----------------------------------------------------------------------------------------
+class CImConvertHeader : public CBase
+//----------------------------------------------------------------------------------------
+/**
+@internalTechnology
+@released
+*/
+	{
+public:
+	IMPORT_C static CImConvertHeader* NewL(CImConvertCharconv& aConverter);
+	~CImConvertHeader();
+
+	IMPORT_C void SetMessageType(TBool aIsMIME); 
+	IMPORT_C void DecodeAllHeaderFieldsL(CImHeader& rHeader); 
+
+	// Functions for decoding & converting descriptors
+
+	IMPORT_C void DecodeNonMIMEHeaderFieldL(const TDesC8& aBufIn, TDes& aBufOut); 
+	IMPORT_C void DecodeHeaderFieldL(const TDesC8& aBufIn, TDes& aBufOut); 
+	IMPORT_C void DecodeHeaderFieldL(const TDesC16& aBufIn, TDes& aBufOut); 
+	IMPORT_C void ConvertHeaderFieldL(const TDesC16& aBufIn, RBuf8& aBufOut, TBool aIsAddressField); 
+	
+	// Header needed for retrieving encoding information, used in Send code.
+    IMPORT_C void EncodeHeaderFieldL(const TDesC& aBufIn, RBuf8& aBufOut, 
+            CArrayFix<TImHeaderEncodingInfo>* aInfoArray, TInt aState, TInt aArrayVal = 0);
+
+	IMPORT_C void EncodeHeaderFieldL(const TDesC& aBufIn, RBuf8& aBufOut,  
+		                             const TUint aCharset, const TImHeaderEncodingInfo::TEncodingType aType, TBool aIsAddressField);
+	
+	IMPORT_C TBool FindEncodedWord(TPtrC8& aData, TInt& aInit,TInt& rStart, TInt& rEnd);
+
+	void Append(TDes& aBuffer, const TDesC8& aAddition);
+	inline CImConvertCharconv& CharConv();
+
+	IMPORT_C TUint OverrideCharset() const;
+	IMPORT_C void SetOverrideCharset(TUint aCharset);
+
+private:
+	void ConstructL();
+	CImConvertHeader(CImConvertCharconv&);
+	// Functions dealing only with single 'encoded-word's
+	void GetCharsetAndEncodeDataL(const TDesC& aBufIn, RBuf8& aBufOut, TImHeaderEncodingInfo& aInfo);
+	void EncodeWordL(const TDesC& aBufIn, RBuf8& aBufOut, TImHeaderEncodingInfo& aInfo,
+						const TDesC8& aCharsetName, RBuf8& aEncodedWord);
+
+	TBool DecodeWordL(const TDesC8& aBufIn, TDes& aBufOut, TInt rRemainder); 
+	void DecodeRecipientListL( CDesCArray& aArray);
+	void DecodeFieldL(const TDesC& aField);
+
+	TBool DoCharsetConversionL(const TDesC& aDataToConvert, RBuf8& aEncodedWord);
+
+	void DoEncodingL(RBuf8& aEncodedWord, TImHeaderEncodingInfo& aInfo);
+
+	TInt AddEncodedWordInfoL(const TDesC8& aEncodedWord, RBuf8& aBufOut, 
+							 TImHeaderEncodingInfo& aInfo, const TDesC8& aCharsetName);
+
+	TBool IsAscii( TUint aChar ) const;
+	TBool ExtractTextToEncode(const TDesC& aBufIn, TInt& rStart, TInt& rEnd, TBool aIsAddressField);
+	void Insert(TDes8& aBuffer, const TDesC16& aInsert);
+
+private:
+	TImHeaderEncodingInfo iEncodingInfo;
+	CImConvertCharconv& iCharConv;
+
+	// Get access to QP/ Base64 encoding/decoding functions
+	TImCodecB64	 iB64Codec;
+	TImCodecQP	 iQPCodec;
+
+	// Need in the narrow build, to check if possible to convert to/from
+	// the machines character set.
+	TUint iCharacterSetId; 
+
+	CImHeader* iHeader;	
+
+	// Converted static variables used in EncodeWordL()
+	TBool	isMIMEMessageHeader;
+	TUint   iOverrideCharset;
+	};
+
+#include <imcvcodc.inl>
+
+#endif //__CIMCONVERTHEADER_H__
+