supl/locationomasuplprotocolhandler/protocolhandler/src/epos_comasuplinitilizerequestor.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:24:21 +0100
branchRCL_3
changeset 45 6b6920c56e2f
parent 44 2b4ea9893b66
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* 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