williamr@2: // Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@4: /** williamr@4: * @file williamr@4: * @publishedAll williamr@4: * @released williamr@4: */ williamr@2: williamr@2: #if !defined(__IMCVCODC_H__) williamr@2: #define __IMCVCODC_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include // CMsgActive williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: #define KBase64 _L("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=") williamr@2: #define KCharFormat _L("%c") williamr@2: williamr@2: // Shared implementation code williamr@2: //---------------------------------------------------------------------------------------- williamr@2: class TImCodec williamr@2: //---------------------------------------------------------------------------------------- williamr@2: /** williamr@4: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: protected: williamr@2: // base64 and UU coding defines. williamr@2: enum EMaskValues{ ESixBitMask = 0x3F, EEightBitMask = 0xFF }; williamr@2: enum EMaskShiftValues{ ESix = 6, EFour = 4, ETwo = 2, EZero = 0 }; williamr@2: williamr@2: public: williamr@2: virtual TInt Encode( const TDesC8& aSrcString, TDes8& rDestString)=0 ; williamr@2: virtual TBool Decode( const TDesC8& aInputLine, TDes8& rOutputLine)=0; williamr@2: williamr@2: protected: williamr@2: // TImCodec(); williamr@2: inline TBool IsDigit( TChar aChar ); williamr@2: }; williamr@2: williamr@2: williamr@2: // Interface for sending file data. williamr@2: //---------------------------------------------------------------------------------------- williamr@2: class TImFileCodec : public TImCodec williamr@2: //---------------------------------------------------------------------------------------- williamr@2: /** williamr@4: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: virtual TInt PrefixNextLineL( TDes8& rOutputLine, const TFileName& aName, TInt& rPaddingCount ); williamr@2: virtual TInt PostfixNextLine( TDes8& rOutputLine, TInt& rPaddingCount ); williamr@2: virtual void Initialise(); williamr@2: williamr@2: protected: williamr@2: TInt iPrefixState; williamr@2: TInt iPostfixState; williamr@2: }; williamr@2: williamr@2: // Dummy, just copies williamr@2: //---------------------------------------------------------------------------------------- williamr@2: class TImCodecNull : public TImFileCodec williamr@2: //---------------------------------------------------------------------------------------- williamr@2: /** williamr@4: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: TInt Encode( const TDesC8& aSrcString, TDes8& rDestString); williamr@2: TBool Decode( const TDesC8& aInputLine, TDes8& rOutputLine); williamr@2: }; williamr@2: williamr@2: // Quoted-printable encoding/decoding williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: class TImCodecQP : public TImFileCodec williamr@2: //---------------------------------------------------------------------------------------- williamr@2: /** williamr@4: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TImCodecQP(); williamr@2: IMPORT_C TInt Encode( const TDesC8& aSrcString, TDes8& rDestString); williamr@2: IMPORT_C TBool Decode( const TDesC8& aInputLine, TDes8& rOutputLine); williamr@2: williamr@2: // Not to be used anymore.. williamr@2: IMPORT_C TInt EncodeRichText( const TDesC8& aInputLine, TDes8& rOutputLine); williamr@2: IMPORT_C TInt DecodeRichText( const TDesC8& aSrcString, TDes& rDestString ); williamr@2: williamr@2: // Functions which allow flexiblity. Can replace the '=' char or add characters.. williamr@2: // to what is defined as 'plain. williamr@2: inline void AddPlainChar(const TDesC8& aCharList ); williamr@2: inline void AddEncodeChar(const TDesC8& aCharList ); williamr@2: inline void SetQPChar( TUint8 aChar); williamr@2: williamr@2: inline TUint8 ReplacementChar( TChar aControlChar ); williamr@2: inline TBool IsPlain( TChar aChar ); williamr@2: williamr@2: private: williamr@2: TBool SmartBreak( TInt written, const TDesC8& pSource ); williamr@2: inline TBool IsBreakable( TChar aChar); williamr@2: inline void AddSoftLineBreak(TDes8& aPtr, TInt& aPadding, TInt& aWritten); williamr@2: inline void AddSoftLineBreak(const TUint8* apEnd, TUint8* aPtr, TInt& aPadding, TInt& aWritten); williamr@2: williamr@2: private: williamr@2: TUint8 iQPCharacter; williamr@2: TPtrC8 iPlainCharList; williamr@2: TPtrC8 iEncodeCharList; williamr@2: williamr@2: TInt iPaddingCount; williamr@2: }; williamr@2: williamr@2: williamr@2: williamr@2: // Base64 coding/decoding williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: class TImCodecB64 : public TImFileCodec williamr@2: //---------------------------------------------------------------------------------------- williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: private: williamr@2: // base64 coding defines williamr@2: enum{ EPadChar = 64 }; williamr@2: williamr@2: public: williamr@2: IMPORT_C TImCodecB64(); williamr@2: IMPORT_C TInt Encode( const TDesC8& aSrcString, TDes8& rDestString); williamr@2: IMPORT_C TBool Decode( const TDesC8& aSrcString, TDes8& rDestString); williamr@2: IMPORT_C void Initialise(); williamr@2: williamr@2: protected: williamr@2: TInt DoEncode(const TDesC8& aSrcString, TDes8& rDestString, TBool aInsertLineBreaks); williamr@2: williamr@2: private: williamr@2: TInt iShiftStored; williamr@2: TInt iMaskShiftStored; williamr@2: }; williamr@2: williamr@4: #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: #include "cimconvertheader.h" williamr@4: #endif williamr@2: williamr@2: // UU coding/decoding williamr@2: williamr@2: //---------------------------------------------------------------------------------------- williamr@2: class TImCodecUU : public TImFileCodec williamr@2: //---------------------------------------------------------------------------------------- williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: private: williamr@2: // UU coding defines williamr@2: williamr@2: enum{ ESpace = 32, EBackQuote = 96 }; williamr@2: williamr@2: enum TImBodyPostfix williamr@2: { williamr@2: EInvertedComma = 0, williamr@2: EEndString, williamr@2: EEndOfPostfix williamr@2: }; williamr@2: williamr@2: public: williamr@2: IMPORT_C TImCodecUU(); williamr@2: IMPORT_C TInt Encode( const TDesC8& aSrcString, TDes8& rDestString ); williamr@2: IMPORT_C TBool Decode( const TDesC8& aSrcString, TDes8& rDestString ); williamr@2: TInt PrefixNextLineL( TDes8& rOutputLine, const TFileName& aName, TInt& rPaddingCount ); williamr@2: TInt PostfixNextLine( TDes8& rOutputLine, TInt& rPaddingCount ); williamr@2: private: williamr@2: void AppendFilenameL( TDes8& rOutputLine, const TFileName& aName ); williamr@2: williamr@2: }; williamr@2: williamr@4: #endif williamr@2: