diff -r 8e6fa1719340 -r 4455192101e4 pushmtm/plugins/PushContentHandler/CUnknownContentHandler.h --- /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 +#include + +// 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__ +