--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/msgsrvnstore/server/inc/cmsvversion1version2converter.h Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,277 @@
+// Copyright (c) 2008-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:
+//
+
+#ifndef __CMSVVERSION1VERSION2CONVERTER_H__
+#define __CMSVVERSION1VERSION2CONVERTER_H__
+
+
+
+#include <s32mem.h>
+#include <badesca.h>
+#include "msvdbadapter.h"
+#include "msvmessagedbadapter.h"
+#include "cmessageconvertermanager.h"
+#include "cmsvconverterwaiter.h"
+#include "CMsvCachedStore.h"
+
+// fwd declaration
+class MMsvMessageStoreConverter;
+
+class TPairedTUidHBufC8;
+/** TCommonHeaderField
+Enum specifying the common header fields
+*/
+enum TCommonHeaderField
+ {
+ EFrom,
+ ETo,
+ ECC,
+ EBCC,
+ ESubject
+#if (defined SYMBIAN_MESSAGESTORE_UNIT_TESTCODE)
+ ,EInvalid
+#endif
+ };
+
+typedef TInt32 TLogId;
+
+/**
+Defines the status of an acknowledgement for a recipient.
+*/
+ enum TSmsAckStatus
+ {
+/**
+An acknowledgement for this recipient has not been requested.
+*/
+ ENoAckRequested = 0,
+/**
+The delivery status for this recipient has been requested, but the status report
+has not yet been received.
+*/
+ EPendingAck,
+/**
+A successful acknowledgement for this recipient has been received.
+*/
+ EAckSuccessful,
+/**
+A failed acknowledgement for this recipient has been received.
+*/
+ EAckError
+ };
+
+
+/** TMsgOutboxBodyEncoding
+Defines how emails will be encoded when they are sent.
+
+@internalAll
+@released
+*/
+
+enum TMsgOutboxBodyEncoding
+ {
+ EMsgOutboxDefault,
+ EMsgOutboxNoAlgorithm,
+ EMsgOutboxMIME,
+ EMsgOutboxMHTMLAsMIME,
+ EMsgOutboxMHTMLAlternativeAsMIME
+ };
+
+
+
+/** Message sending status for a recipient.
+*/
+ enum TRecipientStatus
+ {
+ /** Message is not sent. */
+ ENotYetSent=0,
+ /** Message has been sent. */
+ ESentSuccessfully=1,
+ /** Message sending failed. */
+ EFailedToSend=2};
+
+
+
+/**
+TImHeaderEncodingInfo
+Identifies the header encoding info.
+
+@internalAll
+@released
+*/
+
+class TImHeaderEncodingInfo
+ {
+public:
+
+ enum TFieldList
+ {
+ EFrom, /**< "From" field. */
+ EReplyTo, /**< "Reply To" field. */
+ ETo, /**< "To" field. */
+ ECc, /**< "Cc" field. */
+ EBcc, /**< "Bcc" field. */
+ ESubject /**< Subject field. */
+ };
+ /** Encoding types. */
+ enum TEncodingType
+ {
+ EBase64, /**< Base64. */
+ EQP, /**< QP. */
+ ENoEncoding, /**< No encoding */
+ EUU /**< UU. */
+ };
+
+public:
+ TImHeaderEncodingInfo();
+ TImHeaderEncodingInfo(const TImHeaderEncodingInfo& aFrom);
+ void InternalizeL( RReadStream& aReadStream );
+ void SetField(const TFieldList aField);
+ TFieldList Field() const;
+ void SetOffset(const TInt aOffset);
+ TInt Offset() const;
+ void SetLength(const TInt aLength);
+ TInt Length() const;
+ void SetCharsetUid(const TUint aUid);
+ TUint CharsetUid() const;
+ void SetEncodingType(const TDesC8& aChar);
+ void SetEncodingType(const TEncodingType aType);
+ TEncodingType EncodingType() const;
+ void SetArrayValue(const TInt aValue);
+ TInt ArrayValue() const;
+ void SetAddSpace(const TBool atrueFalse);
+ TBool AddSpace() const;
+ void SetEncodedLength(const TInt aLength);
+ TInt EncodedLength() const;
+
+public:
+ friend class CMsvVersion1Version2Converter;
+
+private:
+ TFieldList iField;
+ TUint16 iOffset;
+ TUint16 iLength;
+ TEncodingType iType;
+ TUint16 iArrayValue;
+ TBool iAddSpace; // A space char needs adding between two adjoining 'encoded-words'
+ TUint8 iEncodedLength; // This can be used to determine space needed for buffer.
+ TUint iCharsetUid;
+
+ };
+
+
+
+
+/**
+CMsvVersion1Version2Converter
+Converts version 1 message store to version 2 message store. This class converts message part
+by storing them in version 2 message store. This class can be extended in future by adding API's
+that will store additional message parts in the database.
+
+
+@internalAll
+@released
+*/
+NONSHARABLE_CLASS (CMsvVersion1Version2Converter): public CBase , public MMsvMessageStoreConverter
+{
+public:
+
+
+ static CMsvVersion1Version2Converter* NewL(CMsvDBAdapter& aDBAdapter,CMsvMessageDBAdapter& aMessageDBAdapter,TDriveNumber aDriveNum,TBool aConversionResume);
+ ~CMsvVersion1Version2Converter();
+ void ConvertMessageStoreL();
+private:
+ CMsvVersion1Version2Converter(CMsvDBAdapter& aDBAdapter,CMsvMessageDBAdapter& aMessageDBAdapter,TDriveNumber aDriveNum,TBool aConversionResume);
+ void ConstructL();
+
+ void AddFieldL(TCommonHeaderField aField);
+ void AddFieldL(HBufC* aFieldName, EFieldType aFieldType);
+ void StartEMailMessageConversionL(TInt32 aMtm);
+ void ConvertEMailImapMessagesL(TInt aConvertedMtmArrayIndex);
+ void ConvertEMailPopMessagesL(TInt aConvertedMtmArrayIndex);
+ void ConvertEMailSmtpMessagesL(TInt aConvertedMtmArrayIndex);
+ void CreatePathL(TDes& aMessagePath, TMsvId aId,TMsvId& aOwningId);
+ TInt ReadEMailMessageHeaderL(TDesC& aMessagePath);
+ TInt ReadEMailMessageEncodedHeaderL(TDesC& aMessagePath);
+ TInt ReadEmailMimeHeaderL(TDesC& aMessagePath);
+ void CreateEMailHeaderTableStructureL();
+ void CreateEMailHeaderTableL(const TUid aMtmId);
+ CArrayFix<TImHeaderEncodingInfo>& EncodingInfo();
+ void InternalizeL(RMsvReadStream& aReadStream);
+ TInt GetPropertyValue();
+
+/* start sms APIs */
+ void InternalizeSmsMessageL(TMsvId aServiceId,TUint32 aMtm);
+ TBool ReadSmsMessageHeaderL(TDes& aPath);
+ void InternalizeSmsHeaderL(RReadStream& aStream,TDes16& detailsOfRecipientField);
+ void InternalizeEmailOverSmsHeaderL(RReadStream& smsHeaderEmailPart);
+ void CreateSmsHeaderTableL();
+ void AddSmsFieldL(HBufC* aFieldName, EFieldType aFieldType);
+ void InitializeL();
+ void DeAllocateMemory();
+ TInt FindStream(TUid aUid,TInt &pos);
+ void FillEmptyEosBufferL();
+
+private:
+ TPtrC iLastErrorMessage;
+ TBool iResume;
+ TDriveNumber iDrive;
+ CMsvDBAdapter& iDBAdapter;
+ CMsvMessageDBAdapter& iMessageDBAdapter;
+ RPointerArray<CFieldPair> iTableFieldPairList;
+ RPointerArray<CHeaderFields> iEmailfieldPairList;
+ RArray<TUid> iConvertedMtmArray;
+ RArray<TMsvId> iServiceIdArray;
+ RArray<TMsvId> iDeleteMessageIdArray;
+ TConversionResumeStatus iResumeStatus;
+
+ CHeaderFields* iSmsHeaderFields;
+ CHeaderFields* iSmsRecipientAddressFields;
+ CHeaderFields* iEmailOverSmsAddressFields;
+
+ CArrayFix<TImHeaderEncodingInfo>* iEncodingInfo;
+ TMsgOutboxBodyEncoding iBodyEncoding;
+
+ RBuf16 iRecipientDetails;
+ RBuf16 iEmailOverSmsAddress;
+
+ /*Prepare the store for reading*/
+ CArrayFix<TPairedTUidHBufC8> *iStreams;
+
+#if (defined SYMBIAN_MESSAGESTORE_UNIT_TESTCODE)
+ friend class CTestSmsMessageV1toV2Converter;
+ friend class CTestVersion1Version2Converter;
+#endif
+ };
+
+/**
+HMsvReadBuffer
+This class reads information from the stream.
+
+@internalAll
+@released
+*/
+NONSHARABLE_CLASS (HMsvReadBuffer) : public TMemBuf
+ {
+public:
+ HMsvReadBuffer(const TDesC8 &aBuf);
+private:
+ virtual void DoRelease();
+ };
+
+#endif // __CMSVVERSION1VERSION2CONVERTER_H__
+
+
+
+