supl/locationsuplfw/settingsapi/src/epos_csuplsettings.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Feb 2010 23:14:27 +0200
branchRCL_3
changeset 4 42de37ce7ce4
parent 0 667063e416a2
child 22 4c4ed41530db
permissions -rw-r--r--
Revision: 201003 Kit: 201007

/*
* Copyright (c) 2005 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:  Implementation of CSuplSettings..in turn calls CSuplSettingsEngine methods
*
*/



// INCLUDE FILES

#include "epos_csuplsettingsengine.h"
#include "epos_csuplsettings.h"
#include "epos_csuplsettingparams.h"
#include "epos_msuplsettingsobserver.h"
#include "epos_csuplsettingsnotifier.h"
#include "epos_csuplsettingsconstants.h"
#include "epos_suplsessionnotifier.h"

// CONSTANTS

// ==================== LOCAL FUNCTIONS ====================


// ================= MEMBER FUNCTIONS =======================

// C++ default constructor can NOT contain any code, that
// might leave.
//
CSuplSettings::CSuplSettings():
    iSettingsNotifier(NULL),iSettingsDBChangeNotifier(NULL),iSessionNotifier(NULL)
    {

    }

EXPORT_C CSuplSettings* CSuplSettings::NewL()
    {
    CSuplSettings* self = new (ELeave) CSuplSettings();

    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop(self);

    return self;
    }

EXPORT_C CSuplSettings* CSuplSettings::NewLC()
    {
    CSuplSettings* self = new (ELeave) CSuplSettings();

    CleanupStack::PushL( self );
    self->ConstructL();
    return self;
    }
// EPOC default constructor can leave.
void CSuplSettings::ConstructL()
    {
    iSettingsEngine = CSuplSettingsEngine::NewL();
    }

// Destructor
EXPORT_C CSuplSettings::~CSuplSettings()
    {
    delete iSettingsNotifier;
    delete iSettingsDBChangeNotifier;
    delete iSettingsEngine; 
    delete iSessionNotifier;
    }
//-------------------------------------------------------------------------------------
//CSuplSettings::SetObserverL()
//
//This method is used to start listening for SUPL setting changes. 
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::SetObserverL(MSuplSettingsObserver& aObserver)
    {
    if (&aObserver == NULL)
        return KErrArgument;
    
    if(iSettingsDBChangeNotifier)
        {
        return KErrAlreadyExists;
        }
    else
        {
        iSettingsDBChangeNotifier = CSuplSettingsNotifier::NewL(aObserver,ETrue);//create a notifier for DB changes
        }
    
    // If already observing return error to client, if not start observation
    if (iSettingsNotifier)
        {
        return KErrAlreadyExists; 
        }
    else
        {
        iSettingsNotifier = CSuplSettingsNotifier::NewL(aObserver);
        }
   
    return KErrNone;
    }
//-------------------------------------------------------------------------------------
//CSuplSettings::RemoveObserver()
//
//This method is used to stop listening for SUPL setting changes.
//--------------------------------------------------------------------------------------
EXPORT_C void CSuplSettings::RemoveObserver()
    {
    if (iSettingsNotifier)
        {           
        delete iSettingsNotifier;
        iSettingsNotifier = NULL;
        }
    if(iSettingsDBChangeNotifier)
        {
        delete iSettingsDBChangeNotifier;
        iSettingsDBChangeNotifier = NULL;
        }
    }

//-------------------------------------------------------------------------------------
//CSuplSettings::SetSessionObserverL()
//
//This method is used to start listening for SUPL session changes. 
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::SetSessionObserverL(MSuplSessionObserver& aObserver)
    {
       
    if(iSessionNotifier)
        {
        return KErrAlreadyExists;
        }
    else
        {
        iSessionNotifier = CSuplSessionNotifier::NewL(aObserver);//create a notifier for DB changes
        }
    
    return KErrNone;
    }
//-------------------------------------------------------------------------------------
//CSuplSettings::RemoveSessionObserver()
//
//This method is used to stop listening for SUPL session changes.
//--------------------------------------------------------------------------------------
EXPORT_C void CSuplSettings::RemoveSessionObserver()
    {
    delete iSessionNotifier;
    iSessionNotifier = NULL;
    }

//-------------------------------------------------------------------------------------
//CSuplSettings::Initialize()
//
//This method is invoked to initialize SUPL settings object.
//--------------------------------------------------------------------------------------
EXPORT_C void CSuplSettings::Initialize(TRequestStatus& aStatus)
    {
        iSettingsEngine->Initialize(aStatus);
    }        
//-------------------------------------------------------------------------------------
//CSuplSettings::CancelInitialize()
//
//This method is invoked to cancel Initialize()
//--------------------------------------------------------------------------------------
EXPORT_C void CSuplSettings::CancelInitialize()
    {
        iSettingsEngine->CancelInitialize();
    }    
//-------------------------------------------------------------------------------------
//CSuplSettings::GenerateHslpAddressFromImsi()
//
//This method can be used to generate HSLP address from the IMSI
// obtained during initialization.   
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::GenerateHslpAddressFromImsi(TDes& aHslpAddress)
    {
    if (!iSettingsEngine->IsInitDone())
        return KErrNotReady;          

    if (!iSettingsEngine->IsInitPassed())
        return KErrNotReady;          
	
    if (aHslpAddress.MaxLength() == 0)
        return KErrArgument;

    if (aHslpAddress.MaxLength() < 40)
        return KErrOverflow;

    return iSettingsEngine->GetHslpAddressFromImsi(aHslpAddress);
    }
//-------------------------------------------------------------------------------------
//CSuplSettings::GetImsi()
//
//This method returns IMSI obtained during initialization of SUPL settings object. 
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::GetImsi(TDes& aImsi)
    {
    if (!iSettingsEngine->IsInitDone())
        return KErrNotReady;          

    if (!iSettingsEngine->IsInitPassed())
        return KErrNotReady;          

    if (aImsi.MaxLength() == 0)
        return KErrArgument;

    if (aImsi.MaxLength() < KMaxIMSILen)
        return KErrOverflow;            

    return iSettingsEngine->GetImsi(aImsi);
    }        
//-------------------------------------------------------------------------------------
//CSuplSettings::IsImsiChanged()
//
//This method compares IMSI value currently stored in SUPL settings storage with
//IMSI value obtained during initialization.
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::IsImsiChanged(TBool& aChanged)
    {
    if (!iSettingsEngine->IsInitDone())
        return KErrNotReady;          
    if (!iSettingsEngine->IsInitPassed())
        return KErrNotReady;          

    return iSettingsEngine->IsImsiChanged(aChanged);
    }
//-------------------------------------------------------------------------------------
//CSuplSettings::GetSuplUsage()
//
//This method is used to retrieve SUPL usage from settings storage. 
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::GetSuplUsage(TSuplSettingsUsage& aUsage) const
    {
    TInt usage, ret;            
    ret = iSettingsEngine->GetSuplUsage(usage);
    
    if (ret == KErrNone)
        {
        aUsage = (TSuplSettingsUsage)usage;
        return KErrNone;        
        }            
    else
        return ret;            
    }            
//-------------------------------------------------------------------------------------
//CSuplSettings::SetSuplUsage()
//
//This method is used to change SUPL usage.
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::SetSuplUsage(const TSuplSettingsUsage aUsage) 
    {
    TInt usage = aUsage;            

    if (usage < CSuplSettings::ESuplUsageAlwaysAsk ||
        usage > CSuplSettings::ESuplUsageDisabled)                    
        return KErrArgument;

    return iSettingsEngine->SetSuplUsage(aUsage);
    }          
//-------------------------------------------------------------------------------------
//CSuplSettings::AddNewServer()
//
//This method is used to add new server into settings. 
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::AddNewServer( const CServerParams* aParamValues, TInt64& aSlpId )
    {
    if(aParamValues == NULL)
        return KErrGeneral;
    return iSettingsEngine->AddNewServer(aParamValues,aSlpId );  
    }

//-------------------------------------------------------------------------------------
//CSuplSettings::SetServerAddress()
//
//This method is used to change server address parameter in server settings 
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::SetServerAddress( const TInt64 aSlpId, const TDesC& aServerAddress)
    {
    TBuf<KMaxHSLPAddrLen> serveraddr;
    serveraddr.Copy(aServerAddress);
    serveraddr.TrimAll();
    if(serveraddr.Length() <= 0)
        return KErrArgument;
    return iSettingsEngine->SetServerAddress(aSlpId,serveraddr);          
    }            
//-------------------------------------------------------------------------------------
//CSuplSettings::GetServerAddress()
//
//This method is used to retrieve server address parameter from server settings.
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::GetServerAddress(const TInt64 aSlpId, TDes& aServerAddress) const
    {
    return iSettingsEngine->GetServerAddress(aSlpId,aServerAddress);            
    }            
//-------------------------------------------------------------------------------------
//CSuplSettings::SetIapName()
//
//This method is used to change IAP Name in server parameters. 
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::SetIapName( const TInt64 aSlpId, const TDesC& aIapName)
    {
    TBuf<KMaxIAPLen> iapname;
    iapname.Copy(aIapName);
    iapname.TrimAll();
    if(iapname.Length() <= 0)
            return KErrArgument;
    return iSettingsEngine->SetIapName(aSlpId,iapname);             
    }            
//-------------------------------------------------------------------------------------
//CSuplSettings::GetIapName()
//
//This method is used to retrieve IAP Name in server parameters. 
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::GetIapName( const TInt64 aSlpId, TDes& aIapName) const
    {
    return iSettingsEngine->GetIapName(aSlpId,aIapName);             
    }            
//-------------------------------------------------------------------------------------
//CSuplSettings::SetServerEnabledFlag()
//
//This method is used to change parameter which indicates whether server
// can be used for SUPL session or not. 
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::SetServerEnabledFlag( const TInt64 aSlpId, const TBool aEnable )
    {
    return iSettingsEngine->SetServerEnabledFlag(aSlpId,aEnable);             
    }            
//-------------------------------------------------------------------------------------
//CSuplSettings::GetServerEnabledFlag()
//
//This method is used to retrieve parameter which indicates whether server
// can be used for SUPL session or not. 
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::GetServerEnabledFlag( const TInt64 aSlpId, TBool& aEnable ) const
    {
    return iSettingsEngine->GetServerEnabledFlag(aSlpId,aEnable );           
    }            
//-------------------------------------------------------------------------------------
//CSuplSettings::SetSimChangeRemoveFlag()
//
//This method is used to change parameter which indicates whether server
// details can be removed if SIM is changed. 
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::SetSimChangeRemoveFlag( const TInt64 aSlpId, const TBool aSimChangeFlag )
    {
    return iSettingsEngine->SetSimChangeRemoveFlag(aSlpId,aSimChangeFlag );             
    }            
//-------------------------------------------------------------------------------------
//CSuplSettings::GetSimChangeRemoveFlag()
//
//This method is used to retrieve parameter which indicates whether server
//details can be removed if SIM is changed. 
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::GetSimChangeRemoveFlag( const TInt64 aSlpId, TBool& aSimChangeFlag ) const        
    {
    return iSettingsEngine->GetSimChangeRemoveFlag(aSlpId,aSimChangeFlag );             
    }            
//-------------------------------------------------------------------------------------
//CSuplSettings::SetUsageInHomwNwFlag()
//
//This method is used to change parameter which indicates whether server
// can be used out side home network or not.
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::SetUsageInHomwNwFlag( const TInt64 aSlpId, const TBool aHomeNwFlag )
    {
    return iSettingsEngine->SetUsageInHomwNwFlag(aSlpId,aHomeNwFlag );             
    }            
//-------------------------------------------------------------------------------------
//CSuplSettings::GetUsageInHomwNwFlag()
//
//This method is used to retrieve parameter which indicates whether server
//can be used out side home network or not. 
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::GetUsageInHomwNwFlag( const TInt64 aSlpId, TBool& aHomeNwFlag ) const
    {
    return iSettingsEngine->GetUsageInHomwNwFlag(aSlpId,aHomeNwFlag );             
    }            

//-------------------------------------------------------------------------------------
//CSuplSettings::SetEditableFlag()
//
//This method is used to change parameter which indicates whether server
// details are editable or not.
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::SetEditableFlag( const TInt64 aSlpId, const TBool aEditFlag )const
    {
    return iSettingsEngine->SetEditableFlag(aSlpId,aEditFlag);             
    }

//-------------------------------------------------------------------------------------
//CSuplSettings::GetEditableFlag()
//
//This method is used to retrieve parameter which indicates whether server
//details are editable or not.
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::GetEditableFlag( const TInt64 aSlpId, TBool& aEditFlag ) const        
    {
    return iSettingsEngine->GetEditableFlag(aSlpId,aEditFlag );             
    }            
//-------------------------------------------------------------------------------------
//CSuplSettings::SetAllParameter()
//
//This method is used to change all parameters of server in SUPL settings.
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::SetAllParameter( 
        const CServerParams* aParamValues)
    {
    return iSettingsEngine->SetAllParameter(aParamValues);             
    }
//-------------------------------------------------------------------------------------
//CSuplSettings::SetDefaultServer()
//
//This method is used to change all parameters of default server in SUPL settings. 
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::SetDefaultServer( 
                       const CServerParams* aParamValues)
    {
    return iSettingsEngine->SetDefaultServer(aParamValues);
    }
//-------------------------------------------------------------------------------------
//CSuplSettings::RemoveServer()
//
//This method is deletes server entry from SUPL settings storage.
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::RemoveServer(TInt64 aSlpId)
    {
    return iSettingsEngine->RemoveServer(aSlpId);             
    }
//-------------------------------------------------------------------------------------
//CSuplSettings::ChangePriority()
//
//This method is changes the priority of the server to the specified priority.
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::ChangePriority(TInt64 aSlpId,TInt aPriority,TBool aDirection)
    {
    return iSettingsEngine->ChangePriority(aSlpId,aPriority,aDirection);             
    }

//-------------------------------------------------------------------------------------
//CSuplSettings::GetSlpInfoFromId()
//
//This method is used to retrieve all properties of server from SUPL settings storage
//based on SLP Id. 
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::GetSlpInfoFromId(
        const TInt64 aSlpId, 
        CServerParams* aParamValues) const
    {
    if(aParamValues == NULL)
        return KErrArgument;
    return iSettingsEngine->GetSlpInfoFromId(aSlpId,aParamValues);
    }
//-------------------------------------------------------------------------------------
//CSuplSettings::GetSlpInfoAddress()
//
//This method is used to retrieve all properties of server from SUPL settings storage
//based on SLP address. 
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::GetSlpInfoAddress(const TDesC& aServerAddress,CServerParams* aParamValues) const
    {
    if(aParamValues == NULL)
        return KErrArgument;
    return iSettingsEngine->GetSlpInfoAddress(aServerAddress,aParamValues);
    }


//--------------------------------------------------------------------------------------
//CSuplSettings::GetDefaultServer()
//
//This method is used to retrieve all properties of default server from SUPL settings storage.
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::GetDefaultServer(CServerParams* aParamValues) const
    {
    return iSettingsEngine->GetDefaultServer(aParamValues);
    }

//--------------------------------------------------------------------------------------
//CSuplSettings::SlpCount()
//
//This method is used to retrieve number of server entries present in SUPL settings. 
//--------------------------------------------------------------------------------------

EXPORT_C TInt CSuplSettings:: SlpCount(TInt& aCount )
    {
    return iSettingsEngine->SlpCount(aCount);
    }

//--------------------------------------------------------------------------------------
//CSuplSettings::IsSlpExists()
//
//This method is used check whether server entry exists or not based on SLP id
//--------------------------------------------------------------------------------------
EXPORT_C TBool CSuplSettings::IsSlpExists(const TInt64 aSlpId)
    {
    return iSettingsEngine->IsSlpExists(aSlpId);
    }
//--------------------------------------------------------------------------------------
//CSuplSettings::IsSlpExists()
//
//This method is used check whether server entry exists or not based on SLP address
//--------------------------------------------------------------------------------------
EXPORT_C TBool CSuplSettings::IsSlpExists(const TDesC& aServerAddress)
    {
    return iSettingsEngine->IsSlpExists(aServerAddress);
    }
//--------------------------------------------------------------------------------------
//CSuplSettings::GetAllSlp()
//
//This synchronous method is used to retrieve properties of all servers 
//from SUPL settings storage.
//--------------------------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::GetAllSlp(RPointerArray<CServerParams>& aParamValues) const
    {
    return iSettingsEngine->GetAllSlp(aParamValues);
    }
//---------------------------------------------------------------------
// CSuplSettings::GetAllSlp()
//
//  This method is used to retrieve properties of all servers from SUPL 
//  settings storage.
//---------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::GetAllSlp(RPointerArray<CServerParams>& aParamValues,TRequestStatus& aStatus) const
    {
    return iSettingsEngine->GetAllSlp(aParamValues,aStatus);
    }

//---------------------------------------------------------------------
// CSuplSettings::SetFallBack()
//
// This method enables or disables the fall back in SUPL settings.
//---------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::SetFallBack(TBool aFallBack)
    {
    return iSettingsEngine->SetFallBack(aFallBack);             
    }
//---------------------------------------------------------------------
// CSuplSettings::GetFallBack()
//
// This method retrieves the fallback value from SUPL settings storage.
//---------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::GetFallBack(TBool& aFallBack) const
    {
    return iSettingsEngine->GetFallBack(aFallBack);             
    }

//---------------------------------------------------------------------
// CSuplSettings::GetTriggerParams()
//
// This method is used to retrieve properties of all active triggers. 
//---------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::GetTriggerParams( RPointerArray<CTriggerParams>& aParamValues ) const
	{
	return iSettingsEngine->GetTriggerParams(aParamValues);        
	}

//---------------------------------------------------------------------
// CSuplSettings::GetTriggerParams()
//
// This method is used to retrieve properties of a given session. 
//---------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::GetTriggerParams( TInt64 aSessionId,
                                                CTriggerParams*& aParamValues ) const
    {
    if( aParamValues )
        {
        return iSettingsEngine->GetTriggerParams(aSessionId,aParamValues);
        }
    return KErrArgument;
    
    }

//---------------------------------------------------------------------
// CSuplSettings::SetNotificationStatus()
//
// Sets Notification status of particular session
//---------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::SetNotificationStatus( TInt64 aSessionId,
    	           									TBool aTriggerNotificationStatus )
	{
	return iSettingsEngine->SetNotificationStatus(aSessionId,aTriggerNotificationStatus);    
	}
//---------------------------------------------------------------------
// CSuplSettings::CancelTriggerSession()
//
// Cancels ongoing triggering session
//---------------------------------------------------------------------
EXPORT_C TInt CSuplSettings::CancelTriggerSession( TInt64 aSessionId )
    {
    return iSettingsEngine->CancelTriggerSession(aSessionId);    
    }
//---------------------------------------------------------------------
// CSuplSettings::GetDefaultIAPName()
//
// Returns the default configured IAP name
//---------------------------------------------------------------------
EXPORT_C TInt  CSuplSettings::GetDefaultIAPName(TDes& aIapName)
    {
    return iSettingsEngine->GetDefaultIAPName(aIapName);    
    }
//  End of File