diff -r 000000000000 -r 72b543305e3a email/pop3andsmtpmtm/servermtmutils/inc/IMCVCODC.H --- /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 +#include +#include +#include +#include +#include +#include // CMsgActive + +#include +#include +#include + +#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 +