epoc32/include/pushentry.h
branchSymbian2
changeset 2 2fe1408b6811
--- /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 <e32std.h>
+#include <msvapi.h>
+#include <msvstd.h>
+
+
+/** 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<TPushMTMProgress> 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 <pushentry.inl>
+
+#endif