email/pop3andsmtpmtm/servermtmutils/inc/IMCVCODC.H
changeset 0 72b543305e3a
child 76 60a8a215b0ec
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/pop3andsmtpmtm/servermtmutils/inc/IMCVCODC.H	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,206 @@
+// Copyright (c) 1999-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:
+//
+/**
+ * @file 
+ * @publishedAll
+ * @released
+ */
+
+#if !defined(__IMCVCODC_H__)
+#define __IMCVCODC_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>
+
+#define KBase64 _L("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=")
+#define KCharFormat _L("%c")
+
+// Shared implementation code	
+//----------------------------------------------------------------------------------------
+class TImCodec
+//----------------------------------------------------------------------------------------
+/**
+@publishedAll
+@released
+*/
+	{
+protected:
+	// base64 and UU coding defines.
+	enum EMaskValues{ ESixBitMask = 0x3F, EEightBitMask = 0xFF };
+	enum EMaskShiftValues{ ESix = 6, EFour = 4, ETwo = 2, EZero = 0 };
+
+public:
+	virtual TInt Encode( const TDesC8& aSrcString, TDes8& rDestString)=0 ;
+	virtual TBool Decode( const TDesC8& aInputLine, TDes8& rOutputLine)=0;
+
+protected:
+	// TImCodec();
+	inline TBool IsDigit( TChar aChar );
+	};
+
+
+// Interface for sending file data.
+//----------------------------------------------------------------------------------------
+class TImFileCodec : public TImCodec
+//----------------------------------------------------------------------------------------
+/**
+@publishedAll
+@released
+*/
+	{
+public:
+	virtual TInt PrefixNextLineL( TDes8& rOutputLine, const TFileName& aName, TInt& rPaddingCount );
+	virtual TInt PostfixNextLine( TDes8& rOutputLine, TInt& rPaddingCount );
+	virtual void Initialise();
+
+protected:
+	TInt iPrefixState;
+	TInt iPostfixState;
+	};	
+
+// Dummy, just copies
+//----------------------------------------------------------------------------------------
+class TImCodecNull :  public TImFileCodec
+//----------------------------------------------------------------------------------------
+/**
+@publishedAll
+@released
+*/
+	{
+public:
+	TInt Encode( const TDesC8& aSrcString, TDes8& rDestString);
+	TBool Decode( const TDesC8& aInputLine, TDes8& rOutputLine);
+	};
+	
+// Quoted-printable encoding/decoding
+
+//----------------------------------------------------------------------------------------
+class TImCodecQP : public TImFileCodec
+//----------------------------------------------------------------------------------------
+/**
+@publishedAll
+@released
+*/
+	{
+public:
+	IMPORT_C TImCodecQP();
+	IMPORT_C TInt Encode( const TDesC8& aSrcString, TDes8& rDestString);
+	IMPORT_C TBool Decode( const TDesC8& aInputLine, TDes8& rOutputLine);
+
+	// Not to be used anymore..
+	IMPORT_C TInt EncodeRichText( const TDesC8& aInputLine, TDes8& rOutputLine);
+	IMPORT_C TInt DecodeRichText( const TDesC8& aSrcString, TDes& rDestString );
+
+	// Functions which allow flexiblity. Can replace the '=' char or add characters..
+	// to what is defined as 'plain.
+	inline void AddPlainChar(const TDesC8&  aCharList );
+	inline void AddEncodeChar(const TDesC8&  aCharList );
+	inline void SetQPChar( TUint8 aChar);
+
+	inline TUint8 ReplacementChar( TChar aControlChar );
+	inline TBool IsPlain( TChar aChar );
+
+private:
+	TBool SmartBreak( TInt written, const TDesC8& pSource );
+	inline TBool IsBreakable( TChar aChar);
+	inline void AddSoftLineBreak(TDes8& aPtr, TInt& aPadding, TInt& aWritten);
+	inline void AddSoftLineBreak(const TUint8* apEnd, TUint8* aPtr, TInt& aPadding, TInt& aWritten);
+
+private:
+	TUint8 iQPCharacter;
+	TPtrC8 iPlainCharList;  
+	TPtrC8 iEncodeCharList;  
+
+	TInt iPaddingCount;
+	};
+
+
+
+// Base64 coding/decoding
+
+//----------------------------------------------------------------------------------------
+class TImCodecB64 : public TImFileCodec
+//----------------------------------------------------------------------------------------
+/**
+@publishedAll
+@released
+*/
+	{
+private:
+	// base64 coding defines
+	enum{ EPadChar = 64 };
+
+public:
+	IMPORT_C TImCodecB64();
+	IMPORT_C TInt Encode( const TDesC8& aSrcString, TDes8& rDestString);
+	IMPORT_C TBool Decode( const TDesC8& aSrcString, TDes8& rDestString);
+ 	IMPORT_C void  Initialise();
+
+protected:
+	TInt DoEncode(const TDesC8& aSrcString, TDes8& rDestString, TBool aInsertLineBreaks);
+
+private:
+	TInt iShiftStored;
+	TInt iMaskShiftStored;
+	};
+
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS  
+#include "cimconvertheader.h"
+#endif
+
+// UU coding/decoding
+
+//----------------------------------------------------------------------------------------
+class TImCodecUU : public TImFileCodec
+//----------------------------------------------------------------------------------------
+/**
+@publishedAll
+@released
+*/
+	{
+private:
+	// UU coding defines
+
+	enum{ ESpace = 32, EBackQuote = 96 };
+
+	enum TImBodyPostfix
+		{
+		EInvertedComma = 0,
+		EEndString,
+		EEndOfPostfix
+		};
+
+public:
+	IMPORT_C TImCodecUU();
+	IMPORT_C TInt Encode( const TDesC8& aSrcString, TDes8& rDestString );
+	IMPORT_C TBool Decode( const TDesC8& aSrcString, TDes8& rDestString );
+	TInt PrefixNextLineL( TDes8& rOutputLine, const TFileName& aName, TInt& rPaddingCount );
+	TInt PostfixNextLine( TDes8& rOutputLine, TInt& rPaddingCount );
+private:
+	void AppendFilenameL( TDes8& rOutputLine, const TFileName& aName );
+	
+	};
+
+#endif
+