--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/plugins/PushContentHandler/CUnknownContentHandler.cpp Mon Sep 13 17:13:53 2010 +0100
@@ -0,0 +1,694 @@
+/*
+* 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: Implementation of CUnknownContentHandler.
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "CUnknownContentHandler.h"
+#include "PushMtmUtil.h"
+#include "PushMtmLog.h"
+#include "PushContentHandlerPanic.h"
+#include "StringResourceReader.h"
+#include <msvids.h>
+#ifdef __SERIES60_PUSH_SP
+#include <CUnknownPushMsgEntry.h>
+#include <BioDB.h> // BIO Message Database and message query methods
+#include <gsmubuf.h> // CSmsBuffer class
+#include <gsmumsg.h> // CSmsMessage class
+#include <smuthdr.h> // CSmsHeader class
+#include <smut.h> // TSmsUtilities class
+#include <txtrich.h> // CRichText class
+#include <biouids.h> // KUidBioMessageTypeMtm const
+#include <apgcli.h>
+#include <apmrec.h>
+#include <DocumentHandler.h>
+#include <Uri16.h>
+#include <UriUtils.h>
+#include <msvuids.h> // KUidMsvMessageEntry const
+#include <PushMtmUi.rsg>
+
+// SMUT Unbranch
+#include <csmsgetdetdescinterface.h>
+
+#endif // __SERIES60_PUSH_SP
+
+// CONSTANTS
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::NewL
+// ---------------------------------------------------------
+//
+CUnknownContentHandler* CUnknownContentHandler::NewL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::NewL")
+
+ CUnknownContentHandler* self = new (ELeave) CUnknownContentHandler;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::NewL")
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::~CUnknownContentHandler
+// ---------------------------------------------------------
+//
+CUnknownContentHandler::~CUnknownContentHandler()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::~CUnknownContentHandler")
+
+ Cancel();
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::~CUnknownContentHandler")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CUnknownContentHandler
+// ---------------------------------------------------------
+//
+CUnknownContentHandler::CUnknownContentHandler()
+: CPushContentHandlerBase(),
+ iSavedMsgId( KMsvNullIndexEntryId )
+ {
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::ConstructL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::ConstructL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::ConstructL")
+
+ CPushContentHandlerBase::ConstructL();
+ // Added to Active Scheduler.
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::ConstructL")
+ }
+
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CollectGarbageL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::CollectGarbageL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::CollectGarbageL")
+
+ DoCollectGarbageL();
+
+#ifdef __SERIES60_PUSH_SP
+ iState = EFilteringAndProcessing;
+#else // __SERIES60_PUSH_SP
+ // Do nothing - message is discarded.
+ iState = EDone;
+#endif // __SERIES60_PUSH_SP
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::CollectGarbageL")
+ }
+
+#ifdef __SERIES60_PUSH_SP
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::ProcessingPushMsgEntryL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::ProcessingPushMsgEntryL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::ProcessingPushMsgEntryL")
+
+ const TBool bioMsg( BioMessageTypeL() );
+ if ( bioMsg )
+ {
+ PUSHLOG_WRITE(" BIO message");
+ // convert to bio format & save
+ SaveBioMessageEntryL();
+ }
+ else
+ {
+ PUSHLOG_WRITE(" Not BIO message");
+
+ // Check if the received content is supported.
+ RApaLsSession apaLs;
+ User::LeaveIfError( apaLs.Connect() );
+ CleanupClosePushL<RApaLsSession>( apaLs );
+
+ // Try to find out the data type.
+ TPtrC contentTypePtr;
+ iMessage->GetContentType( contentTypePtr );
+ HBufC8* contentT8 = HBufC8::NewMaxLC( contentTypePtr.Length() );
+ contentT8->Des().Copy( contentTypePtr );
+ TDataRecognitionResult result;
+ User::LeaveIfError( apaLs.RecognizeData( KNullDesC(),
+ *contentT8,
+ result ) );
+ CleanupStack::PopAndDestroy( contentT8 ); // contentT8
+
+ CDocumentHandler* docHandler = CDocumentHandler::NewLC( NULL );
+ TBool supported = docHandler->CanOpenL( result.iDataType );
+
+ CleanupStack::PopAndDestroy( 2, &apaLs ); // docHandler, apaLs
+
+ // Save only supported msg.
+ if ( supported )
+ {
+ // create unknown push message entry and save
+ SaveUnknownPushMsgEntryL();
+ }
+ }
+
+ iState = EDone;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::ProcessingPushMsgEntryL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::BioMessageTypeL
+// ---------------------------------------------------------
+//
+TBool CUnknownContentHandler::BioMessageTypeL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::BioMessageTypeL")
+
+ // need to create local RFs for BIO otherwise raises exception
+ RFs localFS;
+ CleanupClosePushL( localFS );
+ User::LeaveIfError( localFS.Connect() );
+ CBIODatabase* bioDB = CBIODatabase::NewLC( localFS );
+
+ TPtrC contentTypePtr;
+ iMessage->GetContentType( contentTypePtr );
+
+ iBioMsgUID = KNullUid;
+ TBool isBio = EFalse;
+ // IsBioMessageL returns KErrNone if found or KErrNotFound if not found
+ if ( bioDB->IsBioMessageL( EBioMsgIdIana,
+ contentTypePtr,
+ NULL,
+ iBioMsgUID ) == KErrNone )
+ {
+ isBio = ETrue;
+ }
+
+ CleanupStack::PopAndDestroy( 2 ); // bioDB, localFS
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::BioMessageTypeL")
+ return isBio;
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::SaveBioMessageEntryL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::SaveBioMessageEntryL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::SaveBioMessageEntryL")
+
+ // create sms message from CPushMessage and then save message
+ RFs fileSession;
+ User::LeaveIfError(fileSession.Connect());
+ CleanupClosePushL(fileSession);
+ CSmsBuffer* smsBuffer = CSmsBuffer::NewL();
+ CleanupStack::PushL(smsBuffer);
+
+ CSmsMessage* smsMessage = CSmsMessage::NewL( fileSession,
+ CSmsPDU::ESmsDeliver,
+ smsBuffer );
+ CleanupStack::PushL( smsMessage );
+
+ smsMessage->SmsPDU().SetAlphabet( TSmsDataCodingScheme::ESmsAlphabet8Bit );
+
+ TPtrC8 fieldValue;
+
+ if ( iMessage->GetBinaryHeaderField( EHttpFrom, fieldValue ) ||
+ iMessage->GetBinaryHeaderField( EHttpXWapInitiatorURI, fieldValue ) ||
+ iMessage->GetBinaryHeaderField( EHttpContentLocation, fieldValue ) )
+ {
+ // Convert 8 bit to 16 bit
+ HBufC* tempAddr = HBufC::NewLC( fieldValue.Length() );
+ tempAddr->Des().Copy( fieldValue );
+
+ smsMessage->SmsPDU().SetToFromAddressL( *tempAddr );
+ CleanupStack::PopAndDestroy( tempAddr );
+ }
+
+ if ( iMessage->GetMessageBody( fieldValue ) )
+ {
+ HBufC* tempBody = HBufC::NewLC( fieldValue.Length() );
+ tempBody->Des().Copy( fieldValue );
+
+ smsBuffer->InsertL( 0, *tempBody );
+ CleanupStack::PopAndDestroy( tempBody );
+ }
+
+ CleanupStack::Pop( 2 ); //smsBuffer, smsMessage
+
+ StoreMsgL( smsMessage ); // destroys CSmsMessage (contains smsBuffer)
+ CleanupStack::PopAndDestroy( &fileSession );
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::SaveBioMessageEntryL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::StoreMsgL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::StoreMsgL( CSmsMessage* aSmsMsg )
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::StoreMsgL")
+
+ CleanupStack::PushL( aSmsMsg );
+
+ // Create a CSmsHeader based on this message. smsHdr takes ownership of aSmsMsg
+ CSmsHeader* smsHdr = CSmsHeader::NewL( aSmsMsg );
+ CleanupStack::Pop( aSmsMsg );
+ CleanupStack::PushL( smsHdr );
+
+ // get root entry
+ CMsvEntry* msvEntry = iMsvSession->GetEntryL( KMsvRootIndexEntryId );
+ CleanupStack::PushL( msvEntry );
+
+ // create an invisible blank entry
+ TMsvEntry entry;
+ entry.iType = KUidMsvMessageEntry;
+ entry.SetVisible( EFalse );
+ entry.SetInPreparation( ETrue );
+ entry.SetReadOnly( EFalse );
+ entry.SetUnread( ETrue );
+
+ TMsvId serviceId = SetBioServiceIdL();
+ TBuf<KSmsDescriptionLength> description;
+
+// SMUT Unbranch
+ CSmsGetDetDescInterface* smsPlugin = CSmsGetDetDescInterface::NewL();
+ CleanupStack::PushL( smsPlugin );
+
+ if ( iBioMsgUID != KNullUid )
+ {
+ // sets entry with values passed in
+ TSmsUtilities::PopulateMsgEntry( entry,
+ *aSmsMsg,
+ serviceId,
+ KUidBIOMessageTypeMtm );
+ entry.iBioType = iBioMsgUID.iUid;
+
+ // Look up and set the description
+ TInt index;
+ CBIODatabase* bioDB = CBIODatabase::NewLC( msvEntry->Session().FileSession() );
+ bioDB->GetBioIndexWithMsgIDL( iBioMsgUID, index );
+ description.Copy( bioDB->BifReader(index).Description() );
+ entry.iDescription.Set( description );
+ CleanupStack::PopAndDestroy(); // bioDB
+ }
+ else
+ {
+ // sets entry with values passed in
+ TSmsUtilities::PopulateMsgEntry( entry, *aSmsMsg, serviceId );
+
+ // Look up and set the description
+// SMUT Unbranch
+ smsPlugin->GetDescription( *aSmsMsg, description );
+ entry.iDescription.Set( description );
+ }
+
+ // Set the details
+ TBuf<KSmsDetailsLength> details;
+ TInt err = smsPlugin->GetDetails( msvEntry->Session().FileSession(),
+ *aSmsMsg,
+ details );
+ if ( !err )
+ {
+ entry.iDetails.Set( details );
+ }
+
+// SMUT Unbranch
+ CleanupStack::PopAndDestroy( smsPlugin );
+
+ // Store entry in inbox
+ msvEntry->SetEntryL( KMsvGlobalInBoxIndexEntryId );
+ msvEntry->CreateL( entry );
+ msvEntry->Session().CleanupEntryPushL( entry.Id() );
+ msvEntry->SetEntryL( entry.Id() );
+
+ // Save the message
+ CMsvStore* store = msvEntry->EditStoreL();
+ CleanupStack::PushL( store );
+
+ // Save off the CSmsHdr
+ smsHdr->StoreL( *store );
+
+ // Save the body
+
+ // Create and fill a CRichText object to save to store..
+ CParaFormatLayer* paraFormatLayer = CParaFormatLayer::NewL();
+ CleanupStack::PushL( paraFormatLayer );
+ CCharFormatLayer* charFormatLayer = CCharFormatLayer::NewL();
+ CleanupStack::PushL( charFormatLayer );
+ CRichText* richText = CRichText::NewL( paraFormatLayer, charFormatLayer );
+ CleanupStack::PushL( richText );
+ HBufC* bufBody=HBufC::NewLC( aSmsMsg->Buffer().Length() );
+ TPtr bufBodyPtr = bufBody->Des();
+ aSmsMsg->Buffer().Extract( bufBodyPtr, 0, aSmsMsg->Buffer().Length() );
+ richText->InsertL( 0, bufBodyPtr );
+ store->StoreBodyTextL( *richText );
+ CleanupStack::PopAndDestroy( 4 ); //bufBody, richText, charFormatLayer, paraFormatLayer
+
+ store->CommitL();
+ entry.SetReadOnly( ETrue );
+ entry.SetVisible( ETrue );
+ entry.SetInPreparation( EFalse );
+ msvEntry->ChangeL( entry );
+
+ CleanupStack::PopAndDestroy(); //store
+ msvEntry->Session().CleanupEntryPop(); //entry
+ CleanupStack::PopAndDestroy( 2 ); //msvEntry, smsHdr
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::StoreMsgL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::SetBioServiceIdL
+// ---------------------------------------------------------
+//
+TMsvId CUnknownContentHandler::SetBioServiceIdL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::SetBioServiceIdL")
+
+ CMsvEntry* msvEntry = iMsvSession->GetEntryL( KMsvRootIndexEntryId );
+
+ CleanupStack::PushL( msvEntry );
+
+ TMsvId serviceId = KMsvNullIndexEntryId;
+ TRAPD( err, TSmsUtilities::ServiceIdL( *msvEntry,
+ serviceId,
+ KUidBIOMessageTypeMtm ) );
+ if ( err == KErrNotFound )
+ {
+ serviceId = KMsvLocalServiceIndexEntryId;
+ err = KErrNone;
+ }
+
+ CleanupStack::PopAndDestroy(); //msvEntry
+ User::LeaveIfError( err );
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::SetBioServiceIdL")
+ return serviceId;
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::SaveUnknownPushMsgEntryL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::SaveUnknownPushMsgEntryL()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::SaveUnknownPushMsgEntryL")
+
+ CUnknownPushMsgEntry* unknownPushMsgEntry =
+ CUnknownPushMsgEntry::NewL();
+ CleanupStack::PushL( unknownPushMsgEntry );
+
+ SetUnknownPushMsgEntryFieldsL( *unknownPushMsgEntry );
+
+ iSavedMsgId = unknownPushMsgEntry->SaveL( *iMsvSession,
+ KMsvGlobalInBoxIndexEntryId );
+
+ CleanupStack::PopAndDestroy( unknownPushMsgEntry ); // unknownPushMsgEntry
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::SaveUnknownPushMsgEntryL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL
+ ( CUnknownPushMsgEntry& aUnknownPushMsgEntry )
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL")
+
+ // Set all the relevant fields
+
+ // Get server address.
+ TPtrC8 srvAddress;
+ if ( iMessage->GetServerAddress( srvAddress ) )
+ {
+ aUnknownPushMsgEntry.SetFromL( srvAddress );
+ }
+
+ TPtrC contentTypePtr;
+ iMessage->GetContentType( contentTypePtr );
+ aUnknownPushMsgEntry.SetContentTypeL( contentTypePtr );
+
+ TPtrC8 msgBodyPtr;
+ iMessage->GetMessageBody( msgBodyPtr );
+ aUnknownPushMsgEntry.SetMessageDataL( msgBodyPtr );
+
+ // First line in Inbox: TMsvEntry::iDetails.
+ if ( srvAddress.Length() == 0 )
+ {
+ // Read from resource.
+ HBufC* details =
+ iStrRscReader->AllocReadResourceLC( R_PUSHMISC_UNK_SENDER );
+ aUnknownPushMsgEntry.SetMsgDetailsL( *details );
+ CleanupStack::PopAndDestroy( details );
+ }
+ else
+ {
+ // Convert the "From" information to the format required by the UI
+ // spec and then decode it.
+ HBufC* details = iWapPushUtils->ConvertDetailsL( srvAddress );
+ CleanupStack::PushL( details );
+ HBufC* convertedFrom =
+ CPushMtmUtil::ConvertUriToDisplayFormL( *details );
+ CleanupStack::PushL( convertedFrom );
+ //
+ aUnknownPushMsgEntry.SetMsgDetailsL( *convertedFrom );
+ //
+ CleanupStack::PopAndDestroy( 2, details ); // convertedFrom, details
+ }
+
+ // Second line in Inbox: TMsvEntry::iDescription.
+ TPtrC8 contentUriPtr;
+ iMessage->GetBinaryHeaderField( EHttpXWapContentURI, contentUriPtr );
+ // Copy the 8-bit descriptor into a unicode one.
+ HBufC* contentUri = HBufC::NewMaxLC( contentUriPtr.Length() );
+ contentUri->Des().Copy( contentUriPtr );
+ // Extract file name from X-wap-content-uri.
+ HBufC* fileName = FileNameFromUriL( *contentUri );
+ CleanupStack::PopAndDestroy( contentUri ); // contentUri
+ CleanupStack::PushL( fileName );
+
+ if ( fileName->Length() == 0 )
+ {
+ // TODO: Read from resource.
+ //"Unknown content type" qtn_wap_push_msg_content_not_supported
+ }
+ else
+ {
+ aUnknownPushMsgEntry.SetMsgDescriptionL( *fileName );
+ }
+
+ CleanupStack::PopAndDestroy( fileName ); // fileName
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::SetUnknownPushMsgEntryFieldsL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::FileNameFromUriL
+// ---------------------------------------------------------
+//
+HBufC* CUnknownContentHandler::FileNameFromUriL( const TDesC& aUri ) const
+ {
+ TUriParser pars;
+ User::LeaveIfError( pars.Parse( aUri ) );
+
+ HBufC* res = NULL;
+ if ( pars.IsPresent( EUriPath ) )
+ {
+ TPtrC path = pars.Extract( EUriPath );
+ // Extract the remaining text after the last slash character.
+ // If the path contains a file name, then it has to contain
+ // a slash also, so if there is no slash then it's sure that there
+ // is no file name in it.
+ TInt index = path.LocateReverse( TChar('/') );
+ if ( index < 0 )
+ {
+ // No file name.
+ }
+ else if ( ++index < path.Length() ) // If not at the end...
+ {
+ // Last slash found. Extract the text after the slash.
+ res = path.Mid( index ).AllocL();
+ }
+ }
+
+ if ( !res )
+ {
+ res = KNullDesC().AllocL();
+ }
+
+ return res;
+ }
+
+#endif // __SERIES60_PUSH_SP
+
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::HandleMessageL( CPushMessage* aPushMsg,
+ TRequestStatus& aStatus )
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::HandleMessageL")
+
+ __ASSERT_DEBUG( aPushMsg != NULL,
+ ContHandPanic( EPushContHandPanMsgNull ) );
+
+ iMessage = aPushMsg;
+ iAcknowledge = ETrue;
+ SetConfirmationStatus( aStatus );
+ iState = EGarbageCollecting;
+ IdleComplete();
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::HandleMessageL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::HandleMessageL( CPushMessage* aPushMsg )
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::HandleMessageL")
+
+ __ASSERT_DEBUG( aPushMsg != NULL,
+ ContHandPanic( EPushContHandPanMsgNull ) );
+
+ iAcknowledge = EFalse;
+ iMessage = aPushMsg;
+ iState = EGarbageCollecting;
+ IdleComplete();
+
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::HandleMessageL")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CancelHandleMessage
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::CancelHandleMessage()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::CancelHandleMessage")
+ Cancel();
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::CancelHandleMessage")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CPushHandlerBase_Reserved1
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::CPushHandlerBase_Reserved1()
+ {
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::CPushHandlerBase_Reserved2
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::CPushHandlerBase_Reserved2()
+ {
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::DoCancel
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::DoCancel()
+ {
+ PUSHLOG_ENTERFN("CUnknownContentHandler::DoCancel")
+ Complete( KErrCancel );
+ PUSHLOG_LEAVEFN("CUnknownContentHandler::DoCancel")
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::RunL
+// ---------------------------------------------------------
+//
+void CUnknownContentHandler::RunL()
+ {
+ // Handle errors in RunError().
+ PUSHLOG_WRITE_FORMAT("iStatus.Int(): %d",iStatus.Int())
+ User::LeaveIfError( iStatus.Int() );
+
+ // use active state machine routine to manage activites:
+ switch ( iState )
+ {
+ case EGarbageCollecting:
+ {
+ CollectGarbageL();
+ break;
+ }
+
+#ifdef __SERIES60_PUSH_SP
+
+ case EFilteringAndProcessing:
+ {
+ if ( !FilterPushMsgL() )
+ {
+ // It did not pass the filter. Done.
+ iState = EDone;
+ IdleComplete();
+ }
+ else
+ {
+ // Continue.
+ ProcessingPushMsgEntryL();
+ }
+ break;
+ }
+
+#endif // __SERIES60_PUSH_SP
+
+ default:
+ {
+ PUSHLOG_WRITE("CUnknownContentHandler default EDone")
+ Complete( KErrNone );
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CUnknownContentHandler::RunError
+// ---------------------------------------------------------
+//
+TInt CUnknownContentHandler::RunError( TInt aError )
+ {
+ PUSHLOG_WRITE_FORMAT("CUnknownContentHandler::RunError: %d",aError)
+
+ iState = EDone;
+ Complete( aError );
+ return KErrNone;
+ }
+