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