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@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.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@2: williamr@2: #ifndef __MIUTCONV_H__ williamr@2: #define __MIUTCONV_H__ williamr@2: williamr@2: #include williamr@2: williamr@2: williamr@2: #if !defined (__CHARCONV_H_) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #if !defined (__MIUTHDR_H__) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #if !defined (__UTF_H_) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: // IMail-specific stream type within an IMail file store for TImEmailTransformingInfo williamr@2: // williamr@2: const TUint KUidMsvCharsetNone = {0x10003C7F}; // 268450943 williamr@2: const TUid KUidMsgFileTransformingInfo = {0x100094A5}; // 268473509 williamr@2: const TUid KUidMsgEmailGeneralCenRep = {0x10285A25}; // 271079973 williamr@2: williamr@2: // No longer used as the charset information retrieved from resource file. williamr@2: // Might possibly needed in the future ? maybe williamr@2: // const TUid KUidMiutSystemDefaultCharset = {0x10009418}; // 268473368 williamr@2: // const TUid KUidMiutOverrideCharset = {0x10009419}; // 268473369 williamr@2: williamr@2: _LIT8(KMiutUndisplayableChar, "?"); williamr@2: williamr@2: /** SMTP send methods. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: enum TImSendMethod williamr@2: { williamr@2: /** Simple email. */ williamr@2: ESendAsSimpleEmail, williamr@2: /** MIME email. */ williamr@2: ESendAsMimeEmail williamr@2: }; williamr@2: williamr@2: williamr@2: // Information to be used when sending an email message. williamr@2: // Relating to how parts are encoded and converted. williamr@2: // williamr@2: class TImEmailTransformingInfo williamr@2: /** Encapsulates character conversion and encoding settings for sending SMTP email. williamr@2: williamr@2: The default outcomes for header, body, HTML, and attachment parts respectively williamr@2: for each of the listed categories are given below: williamr@2: williamr@2: Plain Charset: ISO-8859-1,ISO-8859-1,N/A,N/A williamr@2: williamr@2: Plain Encoding:None,None,N/A,UU williamr@2: williamr@2: MIME Charset:UTF8,UTF8,UTF8*,N/A williamr@2: williamr@2: MIME Encoding:B,QP,Base64,Base64 williamr@2: williamr@2: *: the UTF8 value set in the header field, but no conversion is done. The williamr@2: HTML converter converts to UTF8. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TImEmailTransformingInfo& operator=(const TImEmailTransformingInfo& aInfo); williamr@2: IMPORT_C TBool operator==(const TImEmailTransformingInfo& aInfo); williamr@2: williamr@2: // streaming operations williamr@2: IMPORT_C void ExternalizeL( RWriteStream& aWriteStream ) const; williamr@2: IMPORT_C void InternalizeL( RReadStream& aReadStream ); williamr@2: IMPORT_C void StoreL( CMsvStore& aStore ) const; williamr@2: IMPORT_C void RestoreL( CMsvStore& aStore ); williamr@2: williamr@2: // Setting functions williamr@2: IMPORT_C void SetToDefault(const TImSendMethod aMethod); williamr@2: IMPORT_C void SetSendMethod(const TImSendMethod aMethod); williamr@2: IMPORT_C TImSendMethod SendMethod() const; williamr@2: williamr@2: IMPORT_C void SetHeaderEncodingQ(); williamr@2: IMPORT_C void SetHeaderEncodingB(); williamr@2: IMPORT_C void SetBodyTextEncoding(TImEncodingType aType); williamr@2: IMPORT_C void SetHTMLEncoding(TImEncodingType aType); williamr@2: IMPORT_C void SetAttachmentEncoding(TImEncodingType aType); williamr@2: williamr@2: IMPORT_C void SetHeaderAndBodyCharset(TUint aCharset); williamr@2: IMPORT_C void SetHeaderCharset(TUint aCharset); williamr@2: IMPORT_C void SetBodyTextCharset(TUint aCharset); williamr@2: IMPORT_C void SetHTMLCharset(TUint aCharset); williamr@2: williamr@2: // Accessor functions williamr@2: IMPORT_C TImEncodingType HeaderEncoding() const; williamr@2: IMPORT_C TImEncodingType BodyTextEncoding() const; williamr@2: IMPORT_C TImEncodingType HTMLEncoding() const; williamr@2: IMPORT_C TImEncodingType AttachmentEncoding() const; williamr@2: williamr@2: IMPORT_C TUint HeaderCharset() const; williamr@2: IMPORT_C TUint BodyTextCharset() const; williamr@2: IMPORT_C TUint HTMLCharset() const; williamr@2: williamr@2: private: williamr@2: void SetHeaderEncoding(TImEncodingType aType); williamr@2: williamr@2: private: williamr@2: TImEncodingType iHeaderEncoding; williamr@2: TImEncodingType iBodyEncoding; williamr@2: TImEncodingType iHTMLEncoding; williamr@2: TImEncodingType iAttachmentEncoding; williamr@2: williamr@2: TUint iHeaderCharset; williamr@2: TUint iBodyCharset; williamr@2: TUint iHTMLCharset; williamr@2: TUint iTextAttachmentCharset; williamr@2: williamr@2: TImSendMethod iSendMethod; williamr@2: }; williamr@2: williamr@2: williamr@2: // Default Sending Charset/Encoding Values williamr@2: const TImEncodingType KDefaultMIMEHeaderEncoding = EEncodingTypeBASE64; // MIME williamr@2: const TImEncodingType KDefaultMIMEBodyTextEncoding = EEncodingTypeQP; williamr@2: const TImEncodingType KDefaultMIMEHTMLEncoding = EEncodingTypeBASE64; williamr@2: const TImEncodingType KDefaultMIMEAttachmentEncoding= EEncodingTypeBASE64; williamr@2: williamr@2: #define KDefaultPlainCharset KCharacterSetIdentifierIso88591 williamr@2: williamr@2: const TImEncodingType KDefaultPlainHeaderEncoding = EEncodingTypeNone; // Non-MIME or Plain williamr@2: const TImEncodingType KDefaultPlainBodyTextEncoding = EEncodingTypeNone; williamr@2: const TImEncodingType KDefaultPlainAttachmentEncoding = EEncodingTypeUU; williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: // Wrapper class for CHARCONV. williamr@2: // 'Our' charset dependant on build, UNICODE or CodePage 1252. williamr@2: // williamr@2: class CImConvertCharconv : public CBase williamr@2: /** williamr@2: @internalTechnology williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CImConvertCharconv* NewL(CCnvCharacterSetConverter& aConverter, RFs& anFs); williamr@2: ~CImConvertCharconv(); williamr@2: williamr@2: // MUST call prepare function first. williamr@2: IMPORT_C TInt ConvertToOurCharsetL( const TDesC8& aBufIn, TDes& rBufOut, williamr@2: TInt& rNumUnconvertedChars, williamr@2: TInt& rIndexOfFirstUnconvertedChar); williamr@2: IMPORT_C TInt ConvertFromOurCharsetL(const TDesC& aBufIn, TDes8& rBufOut, williamr@2: TInt& rNumUnconvertedChars, williamr@2: TInt& rIndexOfFirstUnconvertedChar); williamr@2: williamr@2: // MUST be called prior to calling above two functions. williamr@2: IMPORT_C TInt PrepareToConvertToFromOurCharsetL(const TUint aUid); williamr@2: williamr@2: IMPORT_C TUint GetMimeCharsetUidL(const TDesC8& aBufIn) const; williamr@2: IMPORT_C HBufC8* GetMimeCharsetTextStringL(const TUint& aUid) const; williamr@2: IMPORT_C TUint DefaultCharset() const; williamr@2: IMPORT_C TUint SystemDefaultCharset() const; williamr@2: williamr@2: static TInt StraightCopy( const TDesC8& aBufIn, TDes& rBufOut); williamr@2: static TInt StraightCopy( const TDesC& aBufIn, TDes8& rBufOut); williamr@2: private: williamr@2: void ConstructL(); williamr@2: CImConvertCharconv(CCnvCharacterSetConverter& aConverter, RFs& anFs); williamr@2: TBool CharsetAvailable(const TUint aUid); williamr@2: void SetSystemDefaultCharsetL(); williamr@2: williamr@2: TInt GetSystemCharsetFromCenRepL(TDes8& aMimeCharSet); williamr@2: williamr@2: enum TEmailGeneralSettingsCenRepId williamr@2: { williamr@2: EEmailGeneralCharSetId = 0x00000000 williamr@2: }; williamr@2: williamr@2: private: williamr@2: CCnvCharacterSetConverter& iConverter; williamr@2: CArrayFix* iCharsetsAvailable; williamr@2: williamr@2: RFs& iFs; williamr@2: TUint iCharsetUid; williamr@2: TUint iSystemDefaultCharset; // Value obtained from .ini file williamr@2: TInt iCharconvState; williamr@2: }; williamr@2: williamr@2: #endif