omaprovisioning/provisioning/ProvisioningSC/Src/CWPWimHandler.cpp
changeset 0 b497e44ab2fc
child 23 4af31167ea77
--- /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	<e32std.h>  
+#include	"CWPEngine.pan"
+#include	<ProvSC.h>
+#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