pushmtm/plugins/PushContentHandler/CUnknownContentHandler.h
branchRCL_3
changeset 69 4455192101e4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CUnknownContentHandler.h	Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,228 @@
+/*
+* 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 CUnknownContentHandler.
+*
+*/
+
+
+
+#ifndef __CUNKNOWNCONTENTHANDLER_H__
+#define __CUNKNOWNCONTENTHANDLER_H__
+
+
+// INCLUDE FILES
+
+#include "CPushContentHandlerBase.h"
+#include "PushContentHandlerDef.hrh"
+#include <E32Base.h>
+#include <bldvariant.hrh>
+
+// CONSTANTS
+
+const TUid KUidPushUnknownContentHandler = { EUidPushUnknownContentHandler };
+_LIT( KUnknownContentHandlerData, "*" );
+
+// FORWARD DECLARATIONS
+
+class CSmsMessage;
+class CUnknownPushMsgEntry;
+
+// CLASS DECLARATION
+
+/**
+* CUnknownContentHandler provides the default plugin when the 
+* specific plugin for a data type cannot be matched.
+*
+* If the feature flag __SERIES60_PUSH_SP is defined, then all this 
+* kind of messages are discarded on reception.
+*/ 
+class CUnknownContentHandler : public CPushContentHandlerBase
+	{
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor. Leaves on failure.
+        * @return The constructed object.
+        */
+	    static CUnknownContentHandler* NewL();
+
+        /**
+        * Destructor.
+        */
+	    virtual ~CUnknownContentHandler();
+
+    private: // Constructors
+
+        /**
+        * Constructor.
+        */
+	    CUnknownContentHandler();
+
+        /**
+        * Symbian OS constructor.
+        */
+	    void ConstructL();
+
+    private: // New functions
+
+        /**
+        * Do Garbage Collection synchronously.
+        * @return None.
+        */
+	    void  CollectGarbageL();
+
+#ifdef __SERIES60_PUSH_SP
+
+        /**
+        * Create/Saving Push Msg Entry in the appropriate message store.
+        * First query the type of push message to check if it is a known BIO
+        * message type: 
+        *   If it is then 
+        *		save Push Message as appropriate BIO message
+        *	else
+        *		save as UnknownPushMsgEntry.
+        * @return None.
+        */
+	    void  ProcessingPushMsgEntryL();
+
+        /**
+        * Check if the given Push Message, which is now owned by the handler,
+        * is a BIO Messsage (setting the member variable iBioMsgUID if it is)
+        * and returning a boolean to indicate success (ETrue) or EFalse otherwise.
+        * @return TBool
+        *  ETrue - push message is a BIO message
+        *  EFalse - push message is not BIO message
+        */
+	    TBool BioMessageTypeL();
+
+        /**
+        * Save CPushMessage as the relevant BIO message type.
+        * Firstly create SMS message and use CPushMessage as
+        * source to populate SMS. Then save SMS message.
+        * @return None.
+        */
+	    void  SaveBioMessageEntryL();
+
+        /**
+        * Create CMsvEntry for sms messsage, stores the entry and 
+        * then delete entry once done.
+        * @param aMessage CSmsMessage which embodies details of CPushMessage.
+        */
+	    void  StoreMsgL( CSmsMessage* aSmsMsg );
+
+        /**
+        * Set the service id for Bio messaging
+        * @return TMsvId The service id for the message store.
+        */
+	    TMsvId SetBioServiceIdL();
+
+        /** 
+        * Save CPushMessage as a CUnknownPushMsgEntry
+        * @return None.
+        */
+	    void  SaveUnknownPushMsgEntryL();
+
+        /**
+        * Sets the Unknown Push Message Entry Fields from the data in
+        * the received CPushMessage:
+        * @param aUnknownPushMsgEntry CUnknownPushMsgEntry to populate with 
+        *        CPushMessage details.
+        */
+	    void  SetUnknownPushMsgEntryFieldsL( CUnknownPushMsgEntry& 
+                                             aUnknownPushMsgEntry );
+
+        /**
+        * Extract the file name from the URI.
+        * @param aUri The URI.
+        * @return The file name part or an empty string.
+        */
+	    HBufC* FileNameFromUriL( const TDesC& aUri ) const;
+
+#endif // __SERIES60_PUSH_SP
+
+    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
+
+        /**
+        * Cancels the handling of the message and revokes the active status
+        * of the handler 
+        */
+	    void DoCancel();
+
+        /**
+        * Handler States:
+        *    EFilteringAndProcessing - Filter new msg according to Service 
+        *                  message settings and Convert CPushMessage to a 
+        *                  format to save and save the message (either as Bio 
+        *                  msg or UnknownPushMsgEntry)
+        *	 EDone		- Clean up, complete observer
+        */
+	    void RunL();
+
+        /**
+        * This is invoked when RunL Leaves with an error.
+        * Cleans up and returns.
+        * @param aError Error passed into this function
+        */
+	    TInt RunError( TInt aError );
+
+    private: // Data
+
+	    enum TState
+            {
+            EGarbageCollecting, 
+            EFilteringAndProcessing,
+            EDone
+            };
+
+        TMsvId              iSavedMsgId; ///< ID of the saved message.
+	    TUid				iBioMsgUID; ///< BIO msg UID.
+    };
+
+#endif	// __CUNKNOWNCONTENTHANDLER_H__
+