--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CSIContentHandler.h Mon Mar 30 12:49:49 2009 +0300
@@ -0,0 +1,436 @@
+/*
+* Copyright (c) 2002 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 "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: Declaration of CSIContentHandler.
+*
+*/
+
+
+
+#ifndef __CSICONTENTHANDLER_H__
+#define __CSICONTENTHANDLER_H__
+
+
+// INCLUDE FILES
+
+#include "CPushContentHandlerBase.h"
+#include "PushContentHandlerDef.hrh"
+#include <E32Base.h>
+#include <msvstd.h>
+#include <nw_dom_attribute.h>
+#include <CharConv.h>
+
+// CONSTANTS
+
+const TUid KUidPushSIContentHandler = { EUidPushSIContentHandler };
+_LIT(KSIContentHandlerData,"text/vnd.wap.si||application/vnd.wap.sic");
+
+// FORWARD DECLARATIONS
+
+class CSIPushMsgEntry;
+
+// CLASS DECLARATION
+
+/**
+* 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 31-July-2001]
+* and either stores the message or deletes it.
+* Also S60 specific requirements are applied.
+*
+* 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
+*
+* 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.
+*/
+class CSIContentHandler : public CPushContentHandlerBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor. Leaves on failure.
+ * @return The constructed object.
+ */
+ static CSIContentHandler* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CSIContentHandler();
+
+ private: // Constructors
+
+ /**
+ * Constructor.
+ */
+ CSIContentHandler();
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL();
+
+ private: // New functions
+
+ /**
+ * Do Garbage Collection synchronously.
+ * @return None.
+ */
+ void CollectGarbageL();
+
+ /**
+ * Parse the current message. If the SI is wbxml encoded then it is
+ * decoded first to XML format. Then the message details (attributes)
+ * are earned from the XML tree.
+ * @return None.
+ */
+ void ParsePushMsgL();
+
+ /**
+ * Parse the indication element.
+ * @param aIndication The element to be parsed.
+ * @return None.
+ */
+ void ParseIndicationL( NW_DOM_ElementNode_t& aIndication );
+
+ /**
+ * Parse an attribute of the indication element.
+ * @param aAttrHandle The attribute to be parsed.
+ * @return None.
+ */
+ void ParseIndAttributeL( NW_DOM_AttributeHandle_t& aAttrHandle );
+
+ /**
+ * Parse the text of the indication element.
+ * @param aTextNode The text node to be parsed.
+ * @return None.
+ */
+ void ParseTextL( NW_DOM_TextNode_t& aTextNode );
+
+
+ /**
+ * Converts the given buffer to unicode (UCS-2).
+ * @param aSrc Source text.
+ * @param aCharSetId Character set ID.
+ * @return The UCS-2 unicode buffer.
+ */
+ HBufC16* ConvertToUnicodeL( const TDesC8& aSrc, TUint aCharSetId );
+
+ /**
+ * Converts the given buffer to unicode (UCS-2).
+ * @param aString Source text.
+ * @param aCharEncoding Character encoding.
+ * @return The UCS-2 unicode buffer.
+ */
+ HBufC16* ConvertToUnicodeL( NW_String_t& aString, NW_Uint32 aCharEncoding );
+
+ /**
+ * Initialise the converter.
+ * @return None.
+ */
+ void InitialiseCharacterSetConverterL();
+
+
+ /**
+ * Convert the action string to a representative numeric value to
+ * facilitate storing the message.
+ * @param aActionString The attribute value indicating the action level
+ * eg 'signal-high'
+ * @return TUint: a value representing the action type.
+ */
+ TUint ConvertActionString( const TDesC8& aActionString ) const;
+
+ /**
+ * The entry fields are set to the correct values.
+ * @return None.
+ */
+ void SetSIPushMsgEntryFieldsL( CSIPushMsgEntry& aSIPushMsgEntry );
+
+ /**
+ * Do the final processing of the message according to the OMA and S60
+ * requirements.
+ * @return None.
+ */
+ void ProcessingPushMsgEntryL();
+
+ /**
+ * Store the new message to Messaging.
+ * @param aMatchingEntryId ID of the matching SI entry.
+ * @return None.
+ */
+ void StoreSIMessageL( TMsvId aMatchingEntryId );
+
+ /**
+ * Handle message order reception.
+ * 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.
+ * @param aMatchingEntryId ID of the matching SI entry.
+ * It is changed only if the function returns EFalse (replace)!
+ * @return ETrue if the entry has to be discarded.
+ */
+ TBool HandleMsgOrderReceptionL( TMsvId& aMatchingEntryId );
+
+ // conversion utilities
+
+ /**
+ * Convert UTC date time into native TTime format. Method can leave.
+ * @param aDateTime The UTC string representing the date and time.
+ * @param aConvertedDate Member date variable passed in to accept
+ * converted UTC date as TTime varaible.
+ * @return TBool indicates if conversion successful (ETrue) or
+ * conversion failed (EFalse)
+ */
+ TBool ConvertDateTimeL( const TDesC& aDateTime,
+ TTime& aConvertedDate ) const;
+
+ /**
+ * Convert OPAQUE data to UTC date time as specified in SI spec.
+ * @param aOpaque OPAQUE data.
+ * @return The UTC time.
+ */
+ HBufC* ConvertOpaqueToUtcL( const TDesC8& aOpaque ) const;
+
+ /**
+ * Check given UTC time string conforms to expected format:
+ * YYYY-MM-DDTHH:MM:SSZ and strip out formatting characters
+ * then validate the remaining characters are all digits.
+ * If validated then add TTime formating character so final
+ * string returned will be of the format YYYYMMDD:HHMMSS.
+ * @param aDateTime UTC string which is validated and returned.
+ * @return boolean: indicates if given date is valid (ETrue)
+ * or not (EFalse)
+ */
+ TBool IsValidUTCTime( TDes& aDateTime ) const;
+
+ /**
+ * Convert OPAQUE or STRING attribute to TTime.
+ * @param aAttrHandle Handle to the attribute.
+ * @param aConvertedDate The resulted TTime.
+ * @return ETrue if the conversion succeeded.
+ */
+ TBool AttributeToTTimeL( NW_DOM_AttributeHandle_t& aAttrHandle,
+ TTime& aConvertedDate ) const;
+
+ // Attribute flags
+
+ /**
+ * Flag whether message has an action attribute
+ * @param aAction boolean to set flag to -
+ * ETrue for action attrib present
+ * EFalse for no action attrib.
+ */
+ inline void SetActionFlag( TBool aAction );
+
+ /**
+ * Check status of action flag to see if message has an action
+ * attribute.
+ * @return TBool ETrue - action attribute present in message
+ * EFalse - no action attribute.
+ */
+ inline TBool ActionFlag() const;
+
+ /**
+ * Flag whether message has a created date attribute.
+ * @param aCreated boolean to set flag to -
+ * ETrue for si-created attrib present
+ * EFalse for no si-created attrib
+ */
+ inline void SetCreatedFlag( TBool aCreated );
+
+ /**
+ * Check status of created flag to see if message has a si-created
+ * attribute.
+ * @return TBool ETrue - si-created attribute present in message
+ * EFalse - no si-created attribute
+ */
+ inline TBool CreatedFlag() const;
+
+ /**
+ * Flag whether message has a Href attribute
+ * @param aHref boolean to set flag to -
+ * ETrue for Href attrib present
+ * EFalse for no href attrib
+ */
+ inline void SetHrefFlag( TBool aHref );
+
+ /**
+ * Check status of href flag to see if message has an href attribute.
+ * @return TBool
+ * ETrue - href attribute present in message
+ * EFalse - no href attribute
+ */
+ inline TBool HrefFlag() const;
+
+ /**
+ * Flag whether message has an expiry date attribute (si-expires).
+ * @param aExpires boolean to set flag to -
+ * ETrue for si-expires present
+ * EFalse for no si-expires date
+ */
+ inline void SetExpiresFlag( TBool aExpires );
+
+ /**
+ * Check status of flag to see if message has an expiry date attribute.
+ * @return TBool
+ * ETrue - si-expires attribute present in message
+ * EFalse - no si-expires attribute
+ */
+ inline TBool ExpiresFlag() const;
+
+ /**
+ * Flag whether message has a si-id attribute
+ * @param aSiId boolean to set flag to -
+ * ETrue for si-id attrib present
+ * EFalse for no si-id attrib
+ */
+ inline void SetSiIdFlag( TBool aSiId );
+
+ /**
+ * Check status of flag to see if message has an si-id attribute.
+ * @return TBool
+ * ETrue - si-id attribute present in message
+ * EFalse - no si-id attribute
+ */
+ inline TBool SiIdFlag() const;
+
+ /**
+ * Flag whether message has a Data attribute (text)
+ * @param aData
+ * boolean to set flag to - ETrue for data attrib present
+ * EFalse for no data attrib
+ */
+ inline void SetDataFlag( TBool aData );
+
+ /**
+ * Check status of data flag to see if message has any data.
+ * @return TBool
+ * ETrue - data attribute present in message
+ * EFalse - no data attribute
+ */
+ inline TBool DataFlag() const;
+
+ private: // Methods from CPushHandlerBase
+
+ /**
+ * HandleMessage Async. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * @param aPushMsg CPushMessage to process.
+ * @param aStatus Request status variable for use in asynchronous
+ * operations.
+ * @return None.
+ */
+ void HandleMessageL( CPushMessage* aPushMsg, TRequestStatus& aStatus );
+
+ /**
+ * HandleMessage Sync. Version. Takes ownership of Push Message and
+ * sets self active to continue processing message.
+ * Initial State: Set data members then go to the next state
+ * @param aPushMsg CPushMessage to process.
+ */
+ void HandleMessageL( CPushMessage* aPushMsg );
+
+ /**
+ * Same functionality as DoCancel()
+ */
+ void CancelHandleMessage();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved1();
+
+ /**
+ * Reserved function.
+ */
+ void CPushHandlerBase_Reserved2();
+
+ private: // Methods from CActive
+
+ /**
+ * Terminates any activity
+ * @return None.
+ */
+ void DoCancel();
+
+ /**
+ * Step through the various representative states for handling a message
+ * States:
+ * EGarbageCollecting - Deleting expired SI msgs from messaging
+ * EFilteringAndParsing - Filter push msg according to Service message
+ * settings and Parses SI push message (retrieving the
+ * attributes)
+ * EProcessing - Processing the current entry. OMA and S60 rules are
+ * applied, then save or update SI msg in the Msg store
+ * EDone - Clean up, complete observer
+ * @return None.
+ */
+ void RunL();
+
+ /**
+ * This is invoked when RunL Leaves with an error so clean up and
+ * return.
+ * @return Error code to scheduler.
+ */
+ TInt RunError(TInt aError);
+
+ private: // Data
+
+ enum
+ {
+ EAction = 0x01,
+ ECreated = 0x02,
+ EHref = 0x04,
+ EExpires = 0x08,
+ ESiId = 0x10,
+ EData = 0x20
+ };
+
+ enum TState
+ {
+ EGarbageCollecting,
+ EFilteringAndParsing,
+ EProcessing,
+ EDone
+ };
+
+ TMsvId iSavedMsgId; ///< ID of the message saved.
+ TUint32 iAttributes; ///< Attribute indication (set or not).
+ TInt iPushMsgAction; ///< Action attribute
+ HBufC* iHrefBuf; ///< Href attribute. Has.
+ HBufC* iSiIdBuf; ///< Si-id attribute. Has.
+ TTime iExpiresTime; ///< Expiration attribute.
+ TTime iCreatedTime; ///< Created attribute.
+ HBufC* iData; ///< Message text. Has.
+
+ NW_Uint32 iCharEncoding; ///< Char encoding of the current msg.
+
+ //
+ CCnvCharacterSetConverter* iCharacterSetConverter; ///< Owned.
+ CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* iCharacterSetsAvailable; ///< Owned.
+ };
+
+#include "CSIContentHandler.inl"
+
+#endif // __CSICONTENTHANDLER_H__
+