messagingfw/wappushfw/SISLContentHandlers/inc/CSIContentHandler.h
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/wappushfw/SISLContentHandlers/inc/CSIContentHandler.h	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,187 @@
+// Copyright (c) 2001-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 __CSICONTENTHANDLER_H__
+#define __CSICONTENTHANDLER_H__
+
+// System includes
+//
+#include <e32base.h>
+
+// Local includes
+//
+#include <push/ccontenthandlerbase.h>
+#include "CMsgParser.h"
+
+// Constants
+//
+const TUid KUidPushSIContentHandler	= { 0x101F3E61 };
+_LIT(KSIContentHandlerData,"text/vnd.wap.si||application/vnd.wap.sic");
+
+// Forward class declarations
+//
+class CSIPushMsgEntry;
+class CSISLPushMsgUtils;
+
+/** 
+ * CSIContentHandler handles Service Indication content  
+ *
+ * This handler takes ownership of the SI message and processes it
+ * according to the Reception rules 
+ * [WAP Service Indication version 08-Nov-1999 section 7.2]
+ * and either stores the message or deletes it.
+ *
+ * OVERVIEW:
+ *	The main body of this class and its functionality lies within
+ *	HandleMessage (asynchonous). This :
+ *		1. takes ownership of the push message
+ *		2. validates the message and generates a parsed document tree
+ *		3. extracts the message attribute values from document tree 
+ *		4. processes the received message
+ *		5. finishes
+ *
+ *	Step 4: is an algorithmic implementation of 7.2 Reception rules
+ *		from WAP Service Indication 08-Nov-1999 with the exception
+ *		that the final step (step 5: handling of information specified
+ *		in the info element) has not been implemented as this is a UI
+ *		feature. 
+ *
+ *		NB: a received message with no creation date will be stored (unless
+ *		its action is set to delete or the expiry condition is met). This 
+ *		means that the si-id in the message store will not be unique.
+ */
+//##ModelId=3B659DB10116
+class CSIContentHandler : public CContentHandlerBase, public MWAPElementHandler
+/**
+@internalComponent
+@released
+*/
+	{
+public:	// Methods
+
+	static CSIContentHandler* NewL();
+
+	virtual ~CSIContentHandler();
+
+private:	// Methods from CPushHandlerBase
+	
+	virtual void HandleMessageL(CPushMessage* aPushMsg, TRequestStatus& aStatus);
+
+	virtual void HandleMessageL(CPushMessage* aPushMsg);
+
+	virtual void CancelHandleMessage();
+
+	virtual void CPushHandlerBase_Reserved1();
+
+	virtual void CPushHandlerBase_Reserved2();
+
+private:
+	// From MWAPElementHandler
+	void HandleElementL ( const RString& aTag, const RString& aAttributeName, const RString& aAttributeValue );
+	void HandleContentL ( const TDesC8& aBytes );
+
+private:	// Methods from CActive
+
+	virtual void DoCancel();
+
+	virtual void RunL();
+
+	virtual TInt RunError(TInt aError);
+
+private:	// Methods
+
+	CSIContentHandler();
+
+	void  ConstructL();
+
+	void  ParsePushMsgL();
+
+	void  SetSIPushMsgEntryFieldsL(CSIPushMsgEntry& aSIPushMsgEntry);
+
+	void  ProcessingPushMsgEntryL();
+
+	void StoreSIMessageL();
+
+	TBool HandleMsgOrderReceptionL();
+
+	// conversion utilities
+
+	TBool ConvertDateTimeL(const TDesC& aDateTime, TTime &aConvertedDate);
+
+	TBool IsValidUTCTime(TDes& aDateTime);
+
+	HBufC16* FormatDateStringL(const TDesC& aData);
+
+	TUint ConvertActionString(const RString& aActionString);
+
+	CSIPushMsgEntry* GetSiEntryL();
+	
+	TBool ValidateDateTime(TDes& aDateTime);
+
+	// Attribute flags
+	inline void  SetActionFlag(TBool aAction);
+
+	inline void  SetCreatedFlag(TBool aCreated);
+
+	inline void  SetHrefFlag(TBool aHref);
+
+	inline void  SetExpiresFlag(TBool aExpires);
+
+	inline void  SetSiIdFlag(TBool aSiId);
+
+	inline void  SetDataFlag(TBool aData); 
+
+	inline TBool ActionFlag() const;
+
+	inline TBool CreatedFlag() const;
+
+	inline TBool HrefFlag() const;
+
+	inline TBool ExpiresFlag() const;
+	
+	inline TBool SiIdFlag() const;
+
+	inline TBool DataFlag() const;
+
+private:	// Attributes
+
+	CSISLPushMsgUtils*  iWapPushUtils;
+	
+	TUint32				iAttributes;
+
+	enum { EAction=0x01, ECreated=0x02, EHref=0x04, EExpires=0x08, ESiId=0x10, EData=0x20 };
+	
+	enum TState { EParsing, EProcessing, EDone };
+
+	TInt				iPushMsgAction;	
+
+	HBufC*				iHrefBuf;		
+
+	HBufC*				iSiIdBuf;
+	
+	TTime				iExpiresTime;
+
+	TTime				iCreatedTime;
+
+	HBufC*				iData;
+
+	TBool				iIndicationTagFound;
+	
+	TBool               iValidDate;	
+	};
+
+#include "CSIContentHandler.inl"
+
+#endif	// __CSICONTENTHANDLER_H__