supl/locationomasuplprotocolhandler/protocolhandler/src/epos_comasuplinitilizerequestor.cpp
changeset 0 667063e416a2
child 22 4c4ed41530db
child 44 2b4ea9893b66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/supl/locationomasuplprotocolhandler/protocolhandler/src/epos_comasuplinitilizerequestor.cpp	Tue Feb 02 01:06:48 2010 +0200
@@ -0,0 +1,235 @@
+/*
+* Copyright (c) 2002-2009 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:   Class for doing asynchronous initilization of Protocol Handler.
+*
+*/
+
+
+
+#include <centralrepository.h>
+
+#include "lbs/epos_comasuplposhandlerbase.h"
+#include "epos_omasuplconfigurationkeys.h"
+
+#include "epos_comasupltrace.h"
+#include "epos_comasuplinitilizerequestor.h"
+#include "epos_comasuplsettings.h"
+
+static const TUid KSUPLVarRepositoryUid = { 0x102750A0 };
+const TInt KMaxIPAddressLength = 256;
+
+_LIT(KTraceFileName,"SUPL_OMA_PH::EPos_COMASUPLInitializeRequestor.cpp");
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// COMASuplInitilizeRequestor::COMASuplInitilizeRequestor
+// C++ constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+COMASuplInitilizeRequestor::COMASuplInitilizeRequestor(COMASuplPosHandlerBase *aPosHandler,
+													   MCompleteInitilization& aObserver,COMASuplSettings* aOMASuplSettings):
+    				 								   CActive( EPriorityStandard),
+    				 								   iPosHandler(aPosHandler),
+    				 								   iObserver( aObserver ),
+    				 								   iOMASuplSettings (aOMASuplSettings)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// COMASuplInitilizeRequestor::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void COMASuplInitilizeRequestor::ConstructL()
+    {
+        iTrace = COMASuplTrace::NewL();	
+        iSuplSettings = CSuplSettings::NewL();
+    	CActiveScheduler::Add( this );
+    	iState = ENotInitialized;
+    	iVariantEnabled = ETrue;
+    	SetVariant();
+    }
+    
+// -----------------------------------------------------------------------------
+// COMASuplInitilizeRequestor::SetVariant()
+// Checks if IMSI variant is enabled
+// -----------------------------------------------------------------------------
+//
+void COMASuplInitilizeRequestor::SetVariant()
+    {
+	iTrace->Trace(_L("COMASuplInitilizeRequestor::SetVariant Start"), KTraceFileName, __LINE__);
+    CRepository *repository = NULL;
+    TRAPD( err, repository = CRepository::NewL( KSUPLVarRepositoryUid ) );
+    if ( KErrNone != err )
+        {
+        return;
+        }
+    TInt val;
+    TInt rc = repository->Get( KOMASuplProtocolHandlerVariant, val );
+    if ( KErrNone == rc && val == 0 )
+        {
+        iVariantEnabled = EFalse;
+        }
+    delete repository;
+	iTrace->Trace(_L("COMASuplInitilizeRequestor::SetVariant End"), KTraceFileName, __LINE__);
+    }    
+    
+// -----------------------------------------------------------------------------
+// COMASuplInitilizeRequestor::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+COMASuplInitilizeRequestor* COMASuplInitilizeRequestor::NewL(COMASuplPosHandlerBase *aPosHandler,
+															 MCompleteInitilization& aObserver,COMASuplSettings* aOMASuplSettings)
+    {
+	    COMASuplInitilizeRequestor* self =  new ( ELeave ) 
+	    									   COMASuplInitilizeRequestor(aPosHandler,aObserver,aOMASuplSettings);
+	    CleanupStack::PushL( self );
+	    self->ConstructL();
+	    CleanupStack::Pop(self);
+	    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// COMASuplInitilizeRequestor::~COMASuplInitilizeRequestor
+// -----------------------------------------------------------------------------
+//
+COMASuplInitilizeRequestor::~COMASuplInitilizeRequestor()
+    {
+    	Cancel();
+	    delete iTrace;	
+    	delete iSuplSettings;
+    }
+
+// -----------------------------------------------------------------------------
+// COMASuplInitilizeRequestor::CompleteSelf
+// -----------------------------------------------------------------------------
+//
+void COMASuplInitilizeRequestor::CompleteSelf()
+    {
+	iTrace->Trace(_L("COMASuplInitilizeRequestor::CompleteSelf Start"), KTraceFileName, __LINE__);
+		TRequestStatus* pStat = &iStatus;
+		User::RequestComplete(pStat, KErrNone);
+		SetActive();
+	iTrace->Trace(_L("COMASuplInitilizeRequestor::CompleteSelf End"), KTraceFileName, __LINE__);
+    }
+    
+// -----------------------------------------------------------------------------
+// COMASuplInitilizeRequestor::DoInitilizationL
+// Starts initilization of POS if present
+// -----------------------------------------------------------------------------
+//
+void COMASuplInitilizeRequestor::DoInitilizationL()
+    {	
+	iTrace->Trace(_L("COMASuplInitilizeRequestor::DoInitilizationL Start"), KTraceFileName, __LINE__);
+		if(iPosHandler)
+		{
+		  	iPosHandler->InitializeL(iStatus);
+		  	iState = EInitializePosHandler;
+		  	SetActive();
+		}    		
+		else
+		{
+			CompleteSelf();
+		}
+	iTrace->Trace(_L("COMASuplInitilizeRequestor::DoInitilizationL End"), KTraceFileName, __LINE__);
+    }
+    
+// -----------------------------------------------------------------------------
+// COMASuplInitilizeRequestor::GetIMSI
+// Retrieves IMSI value from SIM using SUPL Settings API
+// -----------------------------------------------------------------------------
+//
+TInt COMASuplInitilizeRequestor::GetIMSI(TDes& aIMSI)
+    {
+	iTrace->Trace(_L("COMASuplInitilizeRequestor::GetIMSI"), KTraceFileName, __LINE__);
+        TInt err = KErrNone;
+        if( iVariantEnabled )
+            {
+            if( iState == EInitializationComplete )
+                {
+                err = iSuplSettings->GetImsi( aIMSI );
+                if( err != KErrNone )
+                    return err;
+                }
+            else
+                return KErrNotReady;
+            }
+        else
+        	{
+        	return KErrNotSupported;
+        	} 
+        return err;
+    }
+  
+// -----------------------------------------------------------------------------
+// COMASuplInitilizeRequestor::RunL
+// -----------------------------------------------------------------------------
+//
+void COMASuplInitilizeRequestor::RunL()
+    {
+	iTrace->Trace(_L("COMASuplInitilizeRequestor::RunL"), KTraceFileName, __LINE__);
+    		switch( iState )
+    		    {
+    		        case EInitializePosHandler:
+    		            if( iVariantEnabled && iStatus.Int() == KErrNone)
+    		                {
+    		                iState = EInitializeSuplSettings;
+    		                iSuplSettings->Initialize( iStatus );        		            
+        		            SetActive();
+        		            break;
+    		                }
+
+    		        case EInitializeSuplSettings:
+    		        	{
+    		        	RBuf HslpFromImsi;
+    		        	HslpFromImsi.CreateL(KMaxIPAddressLength);
+						CleanupClosePushL(HslpFromImsi);
+                		iSuplSettings->GenerateHslpAddressFromImsi( HslpFromImsi );
+                		iOMASuplSettings->SetHSLPAddressFromIMSI(HslpFromImsi);
+                	    CleanupStack::PopAndDestroy();
+    		            iState = EInitializationComplete;
+    		        	}
+    		            
+    		        default:
+    		        	if( iState != EInitializationComplete && iVariantEnabled )
+    		        		{
+    		                iSuplSettings->Initialize( iStatus );
+        		            iState = EInitializeSuplSettings;
+        		            SetActive();
+        		            break;
+    		        		}
+                        iObserver.InitilizationCompletedL( iStatus.Int() );
+    		    }
+    }
+
+// -----------------------------------------------------------------------------
+// COMASuplInitilizeRequestor::DoCancel
+// -----------------------------------------------------------------------------
+//
+void COMASuplInitilizeRequestor::DoCancel()
+    {    
+	iTrace->Trace(_L("COMASuplInitilizeRequestor::DoCancel"), KTraceFileName, __LINE__);
+		if( iState == EInitializePosHandler )
+		{
+			iPosHandler->CancelInitialize();
+		}
+		if( iState == EInitializeSuplSettings )
+		{
+		    iSuplSettings->CancelInitialize();
+		}
+    }
+
+//  End of File