williamr@2: // Copyright (c) 2000-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: williamr@2: williamr@2: /** williamr@2: @file williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: williamr@2: #ifndef __PUSHENTRY_H__ williamr@2: #define __PUSHENTRY_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: williamr@2: /** UID for the WAP Push MTM. */ williamr@2: const TUid KUidMtmWapPush = {0x10009158}; williamr@2: /** UID for WAP Push SI messages. */ williamr@2: const TUid KUidWapPushMsgSI = {0x10009159}; williamr@2: /** UID for WAP Push SL messages. */ williamr@2: const TUid KUidWapPushMsgSL = {0x1000915A}; williamr@2: /** UID for WAP Push multipart messages. */ williamr@2: const TUid KUidWapPushMsgMultiPart = {0x1000915B}; williamr@2: /** UID for WAP Push unknown-type messages. */ williamr@2: const TUid KUidWapPushMsgUnknown = {0x1000915C}; williamr@2: williamr@2: williamr@2: // Defines for Masking values used to extract status information from iMtmData1 williamr@2: /** TMsvEntry::iMtmData1 mask to get Status value. */ williamr@2: const TInt32 KPushMaskOnlyStatus = 0x0000000F; williamr@2: /** TMsvEntry::iMtmData1 mask to all bits except those for the Status value. */ williamr@2: const TInt32 KPushMaskEverythingButStatus = 0xFFFFFFF0; williamr@2: /** TMsvEntry::iMtmData1 mask to get Action value. */ williamr@2: const TInt32 KPushMaskOnlyAction = 0x000000F0; williamr@2: /** TMsvEntry::iMtmData1 mask to all bits except those for the Action value. */ williamr@2: const TInt32 KPushMaskEverythingButAction = 0xFFFFFF0F; williamr@2: williamr@2: williamr@2: // Defines for Leave Codes williamr@2: /** Base value for WAP Push-specific errors. */ williamr@2: const TInt KWPushBaseError = -1100; williamr@2: /** CPushMsgEntryBase::UpdateL() called without a message server entry being loaded williamr@2: error. */ williamr@2: const TInt KWPushNoMsgIndexEntry = (KWPushBaseError-1); williamr@2: /** Longest String Allowed. */ williamr@2: const TInt KLongestStringAllowed=KMaxTInt32; williamr@2: williamr@2: williamr@2: /** williamr@2: WAP Push Server MTM state information. williamr@2: williamr@2: This enum is used by TPushMTMProgress and CWapPushServerMtm. williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: @see TPushMTMProgress williamr@2: */ williamr@2: enum TPushServerMTMState williamr@2: { williamr@2: /** Server is waiting for a command. */ williamr@2: EWapPushServerMtmWaiting, williamr@2: /** Server is executing a Change command. */ williamr@2: EWapPushServerMtmChange, williamr@2: /** Server is executing a Create command. */ williamr@2: EWapPushServerMtmCreate, williamr@2: /** Server is executing a Delete command. */ williamr@2: EWapPushServerMtmDelete, williamr@2: /** Unused. */ williamr@2: EWapPushServerMtmComplete williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: Encapsulates progress information returned for asynchronous operations with williamr@2: the WAP Push Server MTM. williamr@2: williamr@2: This allows error status and ID of current entry to be returned to caller. williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: @see CMsvOperation::ProgressL() williamr@2: */ williamr@2: class TPushMTMProgress williamr@2: { williamr@2: public: williamr@2: /** Error code. */ williamr@2: TInt iError; // client side needs to be informed of an error williamr@2: /** The number of entries on which the operation was or will be attempted. */ williamr@2: TInt iTotalMsgs; williamr@2: /** The number of entries which have been processed. */ williamr@2: TInt iMsgsProcessed; williamr@2: /** ID of the (first) message being processed. */ williamr@2: TMsvId iMsgId; williamr@2: /** Server state information. */ williamr@2: TPushServerMTMState iPushState;// Operation that is currently in progress williamr@2: }; williamr@2: williamr@2: /** williamr@2: Packages a TPushMTMProgress object into a descriptor. williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: typedef TPckgBuf TPushMTMProgressBuf; williamr@2: williamr@2: williamr@2: /** Panic name and codes */ williamr@2: _LIT(KPushPanicMoniker, "PUSHENTRY"); williamr@2: williamr@2: /** williamr@2: @internalComponent williamr@2: @released williamr@2: */ williamr@2: enum TPushEntryPanic williamr@2: { williamr@2: /** Null Ids for entries not valid (Service, &Msg). */ williamr@2: EPushEntryNullMsgId, williamr@2: /** Only save messages under the Service Entry. */ williamr@2: EPushEntryServiceIdMismatch, williamr@2: /** Not a WAP Push MTM. */ williamr@2: EPushEntryWrongMTMtype, williamr@2: /** iBioType value in TMsvEntry don't match Uid for Push Entry class. */ williamr@2: EPushEntryWrongMsgtype williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: Abstract base class for classes that handle storage of WAP Push Messages in williamr@2: the message server. williamr@2: williamr@2: The class acts as a wrapper for TMsvEntry, and provides accessors and storage williamr@2: functionality. Key pieces of data are mapped onto certain TMsvEntry fields: williamr@2: this speeds up access by applications to this data. This base class has the williamr@2: generic mappings and storage behaviour. More specialised mappings and storage williamr@2: are defined in each derived class. williamr@2: williamr@2: The mappings of data to TMsvEntry fields standard to all classes are: williamr@2: williamr@2: Push Message Type UID: TMsvEntry::iBioType williamr@2: williamr@2: Status: sets bits 0-3 of TMsvEntry::iMtmData1 williamr@2: williamr@2: Some derived classes need to store more data than there are available fields williamr@2: in TMsvEntry, and the Unknown type potentially requires large data capacity. williamr@2: This additional data is saved in the message store associated with the message williamr@2: entry. Derived classes provide this functionality by overriding ExternalizeL() williamr@2: and InternalizeL() implementations. The base class itself uses the message store williamr@2: to store the WAP Push message's raw header and From information. williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: class CPushMsgEntryBase: public CBase williamr@2: { williamr@2: public: williamr@2: /** williamr@2: WAP Push Message status values. williamr@2: williamr@2: @internalTechnology williamr@2: @released williamr@2: */ williamr@2: enum TPushMsgStatus williamr@2: { williamr@2: /** Message is valid. */ williamr@2: EPushMsgStatusValid = 0, williamr@2: /** Message is expired. */ williamr@2: EPushMsgStatusExpired, williamr@2: /** Message is deleted. */ williamr@2: EPushMsgStatusDeleted, williamr@2: /** Message is corrupt. */ williamr@2: EPushMsgStatusCorrupt williamr@2: }; williamr@2: williamr@2: IMPORT_C CPushMsgEntryBase(); williamr@2: williamr@2: IMPORT_C virtual ~CPushMsgEntryBase(); williamr@2: williamr@2: // Creates its own CMsvStore from the CMsvSession & calls StoreL() williamr@2: IMPORT_C virtual TMsvId SaveL(CMsvSession& aSession, TMsvId aParent); williamr@2: IMPORT_C virtual void UpdateL(CMsvSession& aSession); williamr@2: williamr@2: // Creates its own CMsvStore from the CMsvSession & calls RestoreL() williamr@2: IMPORT_C virtual void RetrieveL(CMsvSession& aSession, TMsvId aMsgId); williamr@2: williamr@2: IMPORT_C void SetEntry(const TMsvEntry& aEntry); williamr@2: IMPORT_C void SetStatus(TInt aStatusFlags); williamr@2: IMPORT_C const TDesC8& Header() const; williamr@2: IMPORT_C void SetHeaderL(const TDesC8& aHeader); williamr@2: IMPORT_C const TDesC8& From() const; williamr@2: IMPORT_C void SetFromL(const TDesC8& aFrom); williamr@2: williamr@2: /** williamr@2: Gets the push message content type. williamr@2: williamr@2: @return williamr@2: Content type williamr@2: */ williamr@2: virtual const TDesC& ContentType() const =0; williamr@2: williamr@2: /** williamr@2: Gets the push message type. williamr@2: williamr@2: Each derived class represents a different push message type, and implements williamr@2: this to return the appropriate value. williamr@2: williamr@2: @return williamr@2: Push message type williamr@2: */ williamr@2: virtual TInt32 PushMsgType() const =0; williamr@2: inline const TMsvEntry& Entry() const; williamr@2: inline TInt Status() const; williamr@2: williamr@2: IMPORT_C const TDesC& MsgDescription() const; williamr@2: IMPORT_C void SetMsgDescriptionL(const TDesC& aDescription); williamr@2: IMPORT_C const TDesC& MsgDetails() const; williamr@2: IMPORT_C void SetMsgDetailsL(const TDesC& aDetails); williamr@2: IMPORT_C const TTime& ReceivedDate() const; williamr@2: IMPORT_C TInt AppID(TPtrC8& aAppURI, TInt& aAppID, TBool& aIsAnInt) const; williamr@2: williamr@2: protected: williamr@2: IMPORT_C virtual void ConstructL(const TPtrC8& aAppURI); williamr@2: IMPORT_C virtual void ConstructL(const TInt& aAppID); williamr@2: IMPORT_C virtual void ConstructL(); williamr@2: williamr@2: // No matching StoreL due to different needs for saving & updating msg's williamr@2: IMPORT_C void RestoreL(CMsvStore& aStore ); williamr@2: IMPORT_C virtual void ExternalizeL(RMsvWriteStream& aStream); williamr@2: IMPORT_C virtual void InternalizeL(RMsvReadStream& aStream); williamr@2: williamr@2: /** williamr@2: Sets the push message type. williamr@2: williamr@2: Each derived class represents a different push message type, and implements williamr@2: this to set the appropriate value. williamr@2: */ williamr@2: virtual void SetPushMsgType()=0;// Only the object can set it's push type - class dependent williamr@2: void DoSaveL(CMsvEntry& aMsvEntry); williamr@2: williamr@2: protected: williamr@2: williamr@2: /** Message server entry. */ williamr@2: TMsvEntry iEntry; williamr@2: williamr@2: /** Copy of the message server entry Details field. */ williamr@2: HBufC* iMsgDetails; williamr@2: /** Copy of the message server entry Description field. */ williamr@2: HBufC* iMsgDescription; williamr@2: williamr@2: /** WAP Push message raw header buffer. */ williamr@2: HBufC8* iHeader; williamr@2: /** From field buffer. */ williamr@2: HBufC8* iFrom; williamr@2: /** Set to true if the object has an associated entry in the message server index. */ williamr@2: TBool iHasServerEntry; williamr@2: williamr@2: /** Message AppID as a string. Only one of iAppIDString and iAppIdInt will be set.*/ williamr@2: HBufC8* iAppIDString; williamr@2: /** Message AppID as a number. Only one of iAppIDString and iAppIdInt will be set.*/ williamr@2: TInt iAppIdInt; williamr@2: }; williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: #include williamr@2: williamr@2: #endif