diff -r 000000000000 -r b497e44ab2fc omaprovisioning/provisioning/ProvisioningSC/Src/CWPWimHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omaprovisioning/provisioning/ProvisioningSC/Src/CWPWimHandler.cpp Thu Dec 17 09:07:52 2009 +0200 @@ -0,0 +1,286 @@ +/* +* 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 "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: +* +*/ + + +// INCLUDE FILES +#include "CWPWimHandler.h" +#include +#include "CWPEngine.pan" +#include +#include "ProvisioningDebug.h" +#include "MWPWimObserver.h" + + +// ============================ MEMBER FUNCTIONS =============================== + + +// ----------------------------------------------------------------------------- +// CWPWimHandler::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CWPWimHandler* CWPWimHandler::NewL( MWPWimObserver& aObserver ) + { + CWPWimHandler* handler = CWPWimHandler::NewLC( aObserver ); + CleanupStack::Pop(); + return handler; + } + +// ----------------------------------------------------------------------------- +// CWPWimHandler::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CWPWimHandler* CWPWimHandler::NewLC( MWPWimObserver& aObserver ) + { + CWPWimHandler* self = new( ELeave ) CWPWimHandler( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// ----------------------------------------------------------------------------- +// CWPWimHandler::~CWPWimHandler +// Destructor +// ----------------------------------------------------------------------------- +// +CWPWimHandler::~CWPWimHandler() + { + Cancel(); // CActive + delete iFileLoader; + delete iProvisioningDoc; + } + +// ----------------------------------------------------------------------------- +// CWPWimHandler::ReadProvFile(); +// ----------------------------------------------------------------------------- +// +void CWPWimHandler::ReadProvFile( const TOMAType& aFileType ) + { + FLOG( _L( "[ProvisioningSC] CWPWimHandler::ReadProvFile" ) ); + + iFileType = aFileType; + if( !iClientInitialized ) + { + iPhase = EInitialize; + iFileLoader->Initialize( iStatus ); + SetActive(); + } + } + +// ----------------------------------------------------------------------------- +// CWPWimHandler::DocL(); +// ----------------------------------------------------------------------------- +// +HBufC8* CWPWimHandler::DocL() + { + if( iProvisioningDoc ) + { + return iProvisioningDoc->AllocL(); + } + else + { + return NULL; + } + } + +// ----------------------------------------------------------------------------- +// CWPWimHandler::CWPWimHandler +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CWPWimHandler::CWPWimHandler( MWPWimObserver& aObserver ) + : CActive( EPriorityIdle ), iObserver( aObserver ), + iProvData( NULL, 0 ), iClientInitialized( EFalse ), iFileType( EBootStrap) + { + } + +// ----------------------------------------------------------------------------- +// CWPWimHandler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CWPWimHandler::ConstructL() + { + FLOG( _L( "[ProvisioningSC] CWPWimHandler::ConstructL" ) ); + + CActiveScheduler::Add( this ); + iFileLoader = CWimOMAProv::NewL(); + } + +// ----------------------------------------------------------------------------- +// CWPWimHandler::RunL +// ----------------------------------------------------------------------------- +// +void CWPWimHandler::RunL() + { + FLOG( _L( "[ProvisioningSC] CWPWimHandler::RunL" ) ); + + switch( iPhase ) + { + case EInitialize: + { + FLOG( _L( "[ProvisioningSC] CWPWimHandler::RunL EInitialize" ) ); + if( iStatus == KErrNone ) + { + Retrieve(); // ready to read the actual document + } + else + { + FTRACE(RDebug::Print(_L("[ProvisioningSC] CWPWimHandler::RunL EInitialize err (%d)"), iStatus.Int())); + iObserver.ReadErrorL(); + } + break; + } + case EGetSize: + { + FTRACE(RDebug::Print(_L("[ProvisioningSC] CWPWimHandler::RunL EGetSize status:%d, size:%d"), iStatus.Int(), iFileSize)); + + if (iFileSize > 0 && iStatus == KErrNone ) + { + delete iProvisioningDoc; + iProvisioningDoc = NULL; + iProvisioningDoc = HBufC8::NewL( iFileSize ); + // get the provisioningdoc from sim card, use first accessible + // file type (EBootStrap, EConfig1, EConfig2) + iProvData.Set(iProvisioningDoc->Des()) ; + FLOG( _L( "[ProvisioningSC] CWPWimHandler::RunL EGetSize retrieving file" ) ); + + iFileLoader->Retrieve( iFileType, iProvData, iStatus ); + iPhase = ERetrieve; + SetActive(); + } + else // try to get another type + { + FLOG( _L( "[ProvisioningSC] CWPWimHandler::RunL EGetSize error" ) ); + TBool tryToRead( ETrue ); + switch( iFileType ) + { + case EBootStrap: + { + iFileType = EConfig1; + } + break; + case EConfig1: + { + iFileType = EConfig2; + } + break; + default: + { + tryToRead = EFalse; + } + break; + } + if( tryToRead ) + { + FLOG( _L( "[ProvisioningSC] CWPWimHandler::RunL EGetSize file not found" ) ); + iFileLoader->GetSize( iFileSize, iFileType, iStatus ); + iPhase = EGetSize; + SetActive(); + } + else + { + FLOG( _L( "[ProvisioningSC] CWPWimHandler::RunL EGetSize no more files" ) ); + iObserver.ReadErrorL(); + } + } + break; + } + case ERetrieve: + { + FLOG( _L( "[ProvisioningSC] CWPWimHandler::RunL ERetrieve" ) ); + if( iStatus==KErrNone ) + { + FLOG( _L( "[ProvisioningSC] CWPWimHandler::RunL ERetrieve ok" ) ); + #ifdef _DEBUG + FHex(iProvisioningDoc->Des()); + #endif + FLOG( _L( "[ProvisioningSC] CWPWimHandler::RunL ERetrieve finished" ) ); + + iObserver.ReadCompletedL(); + } + else + { + FTRACE(RDebug::Print(_L("[ProvisioningSC] CWPWimHandler::RunL ERetrieve err:%d"), iStatus.Int())); + iObserver.ReadErrorL(); + } + break; + } + default: + { + FLOG( _L( "[ProvisioningSC] CWPWimHandler::RunL default" ) ); + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CWPWimHandler::DoCancel +// Cancel active request +// ----------------------------------------------------------------------------- +// +void CWPWimHandler::DoCancel() + { + FLOG( _L( "[ProvisioningSC] CWPWimHandler::DoCancel" ) ); + + TRAPD( ignoreError, iObserver.ReadCancelledL() ); + if (ignoreError) ignoreError = KErrNone; + switch( iPhase ) + { + case EInitialize: + { + iFileLoader->CancelInitialize(); + break; + } + case EGetSize: + { + iFileLoader->CancelGetSize(); + break; + } + case ERetrieve: + { + iFileLoader->CancelRetrieve(); + break; + } + default: + { + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CWPWimHandler::Retrieve +// ----------------------------------------------------------------------------- +// +void CWPWimHandler::Retrieve() + { + FLOG( _L( "[ProvisioningSC] CWPWimHandler::Retrieve" ) ); + + if( iProvisioningDoc ) + { + delete iProvisioningDoc; + iProvisioningDoc = NULL; + } + iFileLoader->GetSize( iFileSize, iFileType, iStatus ); + iPhase = EGetSize; + SetActive(); + } + +// End of File