pushmtm/Plugins/PushContentHandler/CSLContentHandler.h
changeset 0 84ad3b177aa3
child 35 5c11946e75b3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/Plugins/PushContentHandler/CSLContentHandler.h	Mon Mar 30 12:49:49 2009 +0300
@@ -0,0 +1,304 @@
+/*
+* 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 CSLContentHandler.
+*
+*/
+
+
+
+#ifndef __CSLCONTENTHANDLER_H__
+#define __CSLCONTENTHANDLER_H__
+
+// INCLUDE FILES
+
+#include "CPushContentHandlerBase.h"
+#include "PushMtmDef.hrh"
+#include "PushContentHandlerDef.hrh"
+#include <E32Base.h>
+#include <bldvariant.hrh>
+#include <nw_dom_attribute.h>
+
+// CONSTANTS
+
+const TUid KUidPushSLContentHandler	= { EUidPushSLContentHandler };
+_LIT( KSLContentHandlerData, "text/vnd.wap.sl||application/vnd.wap.slc" );
+
+// FORWARD DECLARATIONS
+
+class CSLPushMsgEntry;
+class CPushMtmAutoFetchOperation;
+
+// CLASS DECLARATION
+
+/** 
+* CSLContentHandler Handles Service Loading Content  
+*
+* This handler takes ownership of the SL message and processes it
+* according to the Reception rules 
+* [WAP Service Loading version 31-July-2001]
+* and either stores the message or deletes it.
+* Also S60 specific requirements are applied.
+*
+* NB. If __SERIES60_PUSH_SL is not defined, then all SL push messages are 
+*     discarded!
+*/
+class CSLContentHandler : public CPushContentHandlerBase
+	{
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor. Leaves on failure.
+        * @return The constructed object.
+        */
+	    static CSLContentHandler* NewL();
+
+        /**
+        * D'tor.
+        */
+	    virtual ~CSLContentHandler();
+
+    private: // Constructors
+
+        /**
+        * Constructor.
+        */
+	    CSLContentHandler();
+
+        /**
+        * Symbian OS constructor.
+        */
+	    void ConstructL();
+
+    private: // New functions
+
+        /**
+        * Do Garbage Collection synchronously when a new message arrives.
+        * @return None.
+        */
+	    void  CollectGarbageL();
+
+#ifdef __SERIES60_PUSH_SL
+
+        /**
+        * Parse the Push SL message using XML parser.
+        * If Push Message is an SLC then convert it first to text using 
+        * CWbxmlConverterUtil class.
+        * @return None.
+        */
+	    void ParsePushMsgL();
+
+        /**
+        * Parse an attribute of the sl element.
+        * @param aAttrHandle The attribute to be parsed.
+        * @return None.
+        */
+	    void  ParseSlAttributeL( NW_DOM_AttributeHandle_t& aAttrHandle );
+
+        /**
+        * Convert the action string to a representative numeric value to 
+        * facilitate storing the message.
+        * @param aActionString The attribute value indicating the action level 
+        *        eg 'execute-high'
+        * @return TUint: a value representing the action type.
+        */
+	    TUint ConvertActionString( const TDesC8& aActionString ) const;
+
+        /**
+        * Set SL entry fields prior to storing message.
+        * @param aSlPushMsgEntry Entry represents message format to use when 
+        *        storing it.
+        * @return None.
+        */
+	    void SetSlPushMsgEntryFieldsL( CSLPushMsgEntry& aSlPushMsgEntry ) const;
+
+        /**
+        * Check if the message has to be discarded due to empty Href or 
+        * there is a message with higher acton value.
+        * @return None.
+        */
+	    void ProcessingPushMsgEntryL();
+
+        /**
+        * Handle Service invocation: decide what to do next according to 
+        * action value and push settings.
+        * @return Next state.
+        */
+	    TInt HandleServiceInvocationL() const;
+
+        /**
+        * Download the indicated content.
+        * In case of execute-high use the Browser to download the service.
+        * In case of cache use the fetch operation to download the service 
+        * silently.
+        * @return None.
+        */
+	    void FetchPushMsgEntryL();
+
+        /**
+        * Start the Browser and instruct it to download the content 
+        * indicated by the Sl's URI.
+        * @return None.
+        */
+	    void StartBrowserL();
+
+        /**
+        * Check the result of the SL-cache downloading. If it fails, save the 
+        * message. If it succeeds, discard the message.
+        * @return None.
+        */
+	    void FetchCompletedL();
+
+        /**
+        * Apply reception rules and save the push message. 
+        * If a message already exists with the same URL, 
+        * it is saved only if it has a higher action value.
+        * @return None.
+        */
+	    void SavePushMsgEntryL();
+
+        /**
+        * Store the new message to Messaging.
+        * @param aMatchingEntryId ID of the matching SI entry.
+        * @return None.
+        */
+	    void StoreSLMessageL( TMsvId aMatchingEntryId );
+
+	    // 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 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;
+
+#endif // __SERIES60_PUSH_SL
+
+    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.
+        * @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, 
+            EHref = 0x02
+            };
+
+	    enum TState                 ///< States of this state machine.
+            {
+            EGarbageCollecting, 
+            EFilteringAndParsing,
+            EProcessing, 
+            EFetching, 
+            EFetchCompleted, 
+            ESavePushMsgEntry, 
+            EDone
+            };
+
+        TMsvId          iSavedMsgId; ///< ID of the saved message.
+        TUint32         iAttributes; ///< Attribute indication (set or not).
+	    TInt            iPushMsgAction; ///< SL action.
+	    HBufC*          iHrefBuf; ///< Href attribute. Has.
+
+        /// Asynchronous fetch operation that downloads the SL-cache. Owned.
+        CPushMtmAutoFetchOperation* iFetchOp;
+
+        NW_Uint32       iCharEncoding; ///< Char encoding of the current msg.
+        TBool           iSaveAsRead; ///< Mark the message 'read' after saving.
+    };
+
+#include "CSLContentHandler.inl"
+
+#endif	// __CSLCONTENTHANDLER_H__
+