diff -r 481242ead638 -r 48e827313edd pushmtm/Plugins/PushContentHandler/CMultiPartMixedContentHandler.cpp --- a/pushmtm/Plugins/PushContentHandler/CMultiPartMixedContentHandler.cpp Tue Feb 02 00:12:41 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,291 +0,0 @@ -/* -* 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 CMultiPartMixedContentHandler. -* -*/ - -// INCLUDE FILES - -#include "CMultiPartMixedContentHandler.h" -#include -#include -#include - -// Constants - -_LIT(KReserved, "Reserved"); -#if defined(_DEBUG) -_LIT(KErrPushMsgNull, "NULL CPushMessage"); -#endif - -/** - * Static Factory Construction - * - * @param aFs Reference to a file session - * @param aLibrary Reference to DLL Library Object - * @param aIndex Index number corresponding to the Unknown App Handler Class - * 'EMultiPartMixedContentHandler' - * - * @return fully initialized instance of this class - */ -CMultiPartMixedContentHandler* CMultiPartMixedContentHandler::NewL() - { - CMultiPartMixedContentHandler* self = - new (ELeave) CMultiPartMixedContentHandler; - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -/** - * Destructor - */ -CMultiPartMixedContentHandler::~CMultiPartMixedContentHandler() - { - Cancel(); - delete iMultiMessage; - iContentHandler = NULL; // Not owned. - } - -/** - * Constructor - * - * @param aFs Reference to a file session - * @param aLibrary Reference to DLL Library Object - * @param aIndex Index number corresponding to the Unknown App Handler Class - * 'EMultiPartMixedContentHandler' - */ -CMultiPartMixedContentHandler::CMultiPartMixedContentHandler() -: CContentHandlerBase() - { - } - -/** - * This will complete initialization of the object - */ -void CMultiPartMixedContentHandler::ConstructL() - { - CActiveScheduler::Add(this); - } - -#ifdef __TEST_MULTIPART_MIX_SUPP - -/** - * Creates a Multipart Binary Iterator that will be used for splitting apart the binary - * mulitpart. - * - * @param aPushMsg A WAP binary multipart.mixed message that will be processed - */ -void CMultiPartMixedContentHandler::LoadMultipartMsgL() - { - __ASSERT_DEBUG( iMessage!= 0 , User::Panic(KErrPushMsgNull,0)); - - TPtrC contentType; - iMessage->GetContentType(contentType); - if (!contentType.FindF(KMultipartText)) - iMultiMessage = CMultipartTextIterator::NewL(*iMessage); - else if (!contentType.FindF(KMultipartBin)) - iMultiMessage = CMultipartBinIterator::NewL(*iMessage); - else - User::Leave(KErrCorrupt); - - iMultiMessage->FirstL(); - iState = EHandlePart; - - IdleComplete(); - } - -/** - * Handles the Message Part returned from the Multipart iterator - * by creating a new handler based on the Content-Type, then dispatches it - * synchronously. - */ -void CMultiPartMixedContentHandler::HandlePartL() - { - CPushMessage* msgPart = iMultiMessage->PartL(); - CleanupStack::PushL(msgPart); - - TPtrC contentType; - msgPart->GetContentType(contentType); - CContentHandlerBase& contentHandler = - PushContentTypeDispatcher::GetHandlerL( contentType, *iLog, *iManager ); - iContentHandler = &contentHandler; - CleanupStack::Pop(msgPart); - - // treat as an acknowledged message always to ensure - // sequential creation of handlers - iContentHandler->HandleMessageL(msgPart, iStatus); - iState = ENextPart; - SetActive(); - } - -/** - * Moves multipart iterator to the next part. If there is none, - * State: EDone will be set to complete this handler - */ -void CMultiPartMixedContentHandler::NextPartL() - { - if (iMultiMessage->NextL()) - iState = EHandlePart; - else - iState = EDone; - - IdleComplete(); - } - -#endif // __TEST_MULTIPART_MIX_SUPP - -/** - * The Asynchronous entry point for this plug-in to handle the CPushMessage. - * - * Since we really didn't start an async event, make it look as though our - * asynchronous request has been completed. - * - * @param aPushMsg A WAP binary multipart.mixed message that will be processed - * @param aStatus The TRequestStatus of the caller indicating that this will - * be used aysnchronously - */ -void CMultiPartMixedContentHandler::HandleMessageL( CPushMessage* aPushMsg, - TRequestStatus& aStatus ) - { - __ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone)); - -#ifdef __TEST_MULTIPART_MIX_SUPP - iAcknowledge = ETrue; - iMessage = aPushMsg; - SetConfirmationStatus(aStatus); - iState = ELoadMsgData; - IdleComplete(); -#else // __TEST_MULTIPART_MIX_SUPP - iAcknowledge = ETrue; - iMessage = aPushMsg; - SetConfirmationStatus(aStatus); - // Drop all multipart/mixed messages. - iState = EDone; - IdleComplete(); -#endif // __TEST_MULTIPART_MIX_SUPP - } - - -/** - * The Synchronous entry point for this plug-in to handle the CPushMessage. - * - * @param aPushMsg A WAP binary multipart.mixed message that will be processed - * @param aStatus The TRequestStatus of the caller indicating that this will be - * used aysnchronously - */ -void CMultiPartMixedContentHandler::HandleMessageL( CPushMessage* aPushMsg ) - { - __ASSERT_DEBUG( aPushMsg != NULL, User::Panic(KErrPushMsgNull, KErrNone)); - -#ifdef __TEST_MULTIPART_MIX_SUPP - iAcknowledge = EFalse; - iMessage = aPushMsg; - iState = ELoadMsgData; - IdleComplete(); -#else // __TEST_MULTIPART_MIX_SUPP - iAcknowledge = EFalse; - iMessage = aPushMsg; - // Drop all multipart messages. - iState = EDone; - IdleComplete(); -#endif // __TEST_MULTIPART_MIX_SUPP - } - -/** - * Cancels Asynronous requests on called handler. - */ -void CMultiPartMixedContentHandler::CancelHandleMessage() - { - Cancel(); - } - -void CMultiPartMixedContentHandler::CPushHandlerBase_Reserved1() - { - User::Panic(KReserved, KErrNotSupported); - } - -void CMultiPartMixedContentHandler::CPushHandlerBase_Reserved2() - { - User::Panic(KReserved, KErrNotSupported); - } - -/** - * Cancels Asynronous requests on caller and completes self. - */ -void CMultiPartMixedContentHandler::DoCancel() - { - if ( iContentHandler ) - { - iContentHandler->CancelHandleMessage(); - } - Complete( KErrCancel ); - } - -/** - * State machine to step through the multipart message until it is done - * - * State EHandlePart: Starts the processing of each part of the multipart - * State ENextPart: Moves the interator to point to the next part of the multipart - * when there are no more parts, EDone will be the next state - * State EDone: Clean up and complete - */ -void CMultiPartMixedContentHandler::RunL() - { - switch(iState) - { - -#ifdef __TEST_MULTIPART_MIX_SUPP - - case ELoadMsgData: - { - LoadMultipartMsgL(); - break; - } - case EHandlePart: - { - HandlePartL(); - break; - } - case ENextPart: - { - NextPartL(); - break; - } - -#endif // __TEST_MULTIPART_MIX_SUPP - - case EDone: - { - Complete(KErrNone); - break; - } - default: - { - break; - } - } - } - -/** - * Clean up - */ -TInt CMultiPartMixedContentHandler::RunError(TInt aError) - { - iState=EDone; - Complete(aError); - return KErrNone; - } -