--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/supl/locationsuplfw/settingsapi/inc/epos_csuplsettingsengine.h Tue Feb 02 01:06:48 2010 +0200
@@ -0,0 +1,1308 @@
+/*
+* 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:
+* See class description below.
+*
+*/
+
+
+
+#ifndef __EPOS_CSUPLSETTINGSENGINE_H__
+#define __EPOS_CSUPLSETTINGSENGINE_H__
+
+// INCLUDES
+#include <e32base.h>
+#include <etel.h>
+#include <etelmm.h>
+
+#include "epos_csuplsettings.h"
+#include "epos_csuplsettingsinternal.h"
+// FORWARD DECLARATIONS
+class CRepository;
+class CSuplEtelRequest;
+class CServerParams;
+class CTriggerParams;
+class CServerExtensionParams;
+class CSuplSettings;
+class CSettingsDatabaseHandler;
+
+// CONSTANTS
+
+// CLASS DECLARATION
+
+/**
+* This class is used for accessing central repository and to get
+* IMSI from ETEL.
+*
+* This is part of @lib epos_suplsettings.lib
+* @since 3.1
+*/
+class CSuplSettingsEngine : public CBase
+ {
+
+
+ public:
+ enum TEtelReqState
+ {
+ EUndefined,
+ EImsi,
+ ELoc
+ };
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ *
+ * @returns A new instance of this class.
+ */
+ static CSuplSettingsEngine* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CSuplSettingsEngine();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CSuplSettingsEngine();
+
+ /**
+ * By default EPOC constructor is private.
+ */
+ void ConstructL();
+
+ public: // New functions
+
+ /**
+ * This method connects to ETEL, instantiates ETEL request
+ * active object. This is an asynchronous call.
+ * It retrieves IMSI value from IMSI.
+ */
+ void Initialize(TRequestStatus& aStatus);
+
+ /**
+ * This method connects to ETEL.
+ */
+ TInt ConnectToEtelL();
+
+ /**
+ * This method cancels initialization request.
+ */
+ void CancelInitialize();
+
+ /* *
+ * This method sets HSLP address, IAP Name and changed by field
+ * in SUPL settings.
+
+ TInt Set(
+ IN const TDesC& aHslpAddress,
+ IN const TDesC& aIapName,
+ IN const TInt aChangedBy
+ );
+
+ *
+ * This method retrieves HSLP address, IAP Name, IMSI vlaue and
+ * changed by field from SUPL settings.
+
+ TInt Get(
+ OUT TDes& aHslpAddress,
+ OUT TDes& aIapName,
+ OUT TDes& aImsi,
+ OUT TInt& aChangedBy
+ );
+*/
+ /**
+ * This method generates HSLP address from the IMSI retrieved from
+ * ETEL during initialization.
+ */
+ TInt GetHslpAddressFromImsi(
+ /* OUT */ TDes& aHslpAddr
+ );
+
+ /**
+ * This method creates a concurrent read/write transaction.
+ * The method leaves a clean-up item to clean-up stack to roll back
+ * the changes in case of leave.
+ * Remember to pop the item from the stack before making commit.
+ */
+ TInt LockEngineL();
+
+ /**
+ * This method commits a concurrent read/write transaction and pops
+ * the roll-back clean-up item from the stack
+ *
+ * The method handles possible roll back in case of failure.
+ *
+ */
+ TInt UnLockEngine(TBool aWithCommit);
+
+ /**
+ * This method retrieves currently active IMSI. Currently active IMSI
+ * is retrieved during initialization time.
+ *
+ * @param aImsi will hold, on successful completion, currently active IMSI
+ * @return one of the following error codes returned
+ * - KErrNone if method completed successfully
+ * - KErrNotReady if this method is called before @ref Initialize
+ */
+
+ TInt GetImsi(TDes& aImsi);
+
+ /**
+ * This method compares IMSI value currently stored in SUPL settings and
+ * currently active IMSI. If both are same, this method returns false else
+ * returns true.
+ *
+ * @param aChanged will hold, on successful completion, one of the following value
+ * - ETrue if currently active IMSI and IMSI value stored in SUPL settings
+ * are different.
+ * - EFalse if currently active IMSI and IMSI value stored in SUPL settings
+ * are same.
+ * @return one of the following
+ * - KErrNone if method completed successfully
+ * - KErrNotReady if this method is called before @ref Initialize
+ */
+ TInt IsImsiChanged(TBool& aChanged);
+
+ /**
+ * This method is used to retrieve SUPL usage from settings storage.
+ *
+ * @param [OUT] aUsage will hold, upon successful completion, value indicating
+ * current SUPL usage
+ * @return one of the following error codes:
+ * - KErrNone if SUPL usage retrieved successfully.
+ * - KErrNotFound if the SUPL State is not found in SUPL settings
+ * - KErrUnknown if retrieving SUPL usage from settings storage failed
+ */
+
+ TInt GetSuplUsage(TInt& aUsage);
+
+ /**
+ * This method is used to change SUPL usage. Using this method, SUPL usage can be
+ * set to always ask or automatic or automatic in home network or disabled.
+ * By default, SUPL usage will be set to always ask.
+ *
+ * Note that this method should be invoked only after settings are locked
+ * using @ref LockSettingsL() method. After changing SUPL usage, settings
+ * should be unlocked using @ref UnlockSettings() method.
+ *
+ * @param [IN] aUsage Usage to be set for SUPL usage
+ * @return one of the following error codes:
+ * - KErrNone if SUPL usage is changed successfully.
+ * - KErrArgument if aUsage field is not in range
+ * - KErrNotReady if this method is invoked before @ref LockSettingsL()
+ * - KErrUnknown if changing SUPL usage in settings storage has failed
+ */
+ TInt SetSuplUsage(const TInt aUsage);
+ /*
+ * This method is used to check if the initialisation has been done using @ref Initialize()
+ *
+ * @return ETrue if init has been done
+ * EFalse otherwise
+ */
+ TBool IsInitDone();
+ /*
+ * This method is used to check if the initialisation has been successful
+ *
+ * @return ETrue if init has been succesful
+ * EFalse otherwise
+ */
+ TBool IsInitPassed();
+
+ /**
+ * This method is used to add new server into settings. It is client's responsibility
+ * to set all the parameters in aParamValues except SLP identification which will
+ * generated automatically.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aParamValues Server parameter values which which the server entry needs to be added
+ * @param [OUT] aSlpId SLP identification for the new server added
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ */
+ TInt AddNewServer(
+ const CServerParams* aParamValues,
+ TInt64& aSlpId
+ );
+
+
+ /**
+ * This method is used to change server address parameter in server settings
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be changed
+ * @param [IN] aServerAddres SUPL Server address
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrNotReady if this method is invoked before invoked before @ref LockSettingsL()
+ * - KErrArgument if address passed is empty or if the SLP ID passed is not valid
+ */
+
+ TInt SetServerAddress(
+ const TInt64 aSlpId,
+ const TDesC& aServerAddress
+ );
+
+ /**
+ * This method is used to retrieve server address parameter from server settings. Client
+ * has to allocate memory for server address parameter.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID of server for which the server address needs to be retrieved
+ * @param [OUT] aServerAddres SUPL Server address
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+
+ TInt GetServerAddress(
+ TInt64 aSlpId,
+ TDes& aServerAddress
+ ) const;
+
+ /**
+ * This method is used to change protocol version supported by SUPL server. The protocol
+ * version consists of two parts : Major version and Minor version.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be changed
+ * @param [IN] aMajor Major version number. It can takes values from 0 to 255.
+ * @param [IN] aMinor Minor version number. It can takes values from 0 to 255.
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrNotReady if this method is invoked before invoked before @ref LockSettingsL()
+ * - KErrArgument if version parameters are not in range or if the SLP ID passed is not valid
+ */
+ TInt SetVersion(
+ const TInt64 aSlpId,
+ const TInt aMajor,
+ const TInt aMinor
+ );
+
+ /**
+ * This method is used to retrieve protocol version supported by SUPL server. The protocol
+ * version consists of two parts : Major version and Minor version.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be retrieved
+ * @param [OUT] aMajor Major version number. It can takes values from 0 to 255.
+ * @param [OUT] aMinor Minor version number. It can takes values from 0 to 255.
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt GetVersion(
+ const TInt64 aSlpId,
+ TInt& aMajor,
+ TInt& aMinor
+ ) const;
+
+ /**
+ * This method is used to change IAP Name in server parameters. IAP name refers to
+ * the access point which is used to access the HSLP over the internet.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be changed
+ * @param [IN] aIapName The Internet Access Point Name refers to the access point which is
+ * used to access the HSLP over the internet. This can have maximum size of 100 characters.
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrNotReady if this method is invoked before invoked before @ref LockSettingsL()
+ * - KErrArgument if IAP Name is empty or if the SLP ID passed is not valid
+ */
+ TInt SetIapName(
+ const TInt64 aSlpId,
+ const TDesC& aIapName
+ );
+
+ /**
+ * This method is used to retrieve IAP Name in server parameters. IAP name refers to
+ * the access point which is used to access the HSLP over the internet. It is client's
+ * responsibility to allocate memory for IAP name before invoking this method.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be retrieved
+ * @param [OUT] aIapName The Internet Access Point Name refers to the access point which is
+ * used to access the HSLP over the internet. This can have maximum size of 100 characters.
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt GetIapName(
+ const TInt64 aSlpId,
+ TDes& aIapName
+ ) const;
+
+ /**
+ * This method is used to change manufacturer in server parameters. Manufacturer name
+ * refers to the service provider who is providing SUPL service.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be changed
+ * @param [IN] aManufacturer Manufacture name. This can have maximum size of 100 characters.
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrNotReady if this method is invoked before invoked before @ref LockSettingsL()
+ * - KErrArgument if manufacturer name is empty or if the SLP ID passed is not valid
+ */
+ TInt SetManufacturerName(
+ const TInt64 aSlpId,
+ const TDesC& aManufacturer
+ );
+
+ /**
+ * This method is used to retrieve manufacturer name in server parameters.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be retrieved
+ * @param [OUT] aManufacturer Manufacture name. This can have maximum size of 100 characters.
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt GetManufacturerName(
+ const TInt64 aSlpId,
+ TDes& aManufacturerName
+ ) const;
+
+ /**
+ * This method is used to change timestamp when the HSLP was used last time.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be changed
+ * @param [IN] aTime Time stamp
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrNotReady if this method is invoked before invoked before @ref LockSettingsL()
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt SetLastUseTime(
+ const TInt64 aSlpId,
+ const TTime aTime
+ );
+
+ /**
+ * This method is used to retrieve timestamp when the SLP was used last time.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be retrieved
+ * @param [OUT] aTime Time stamp
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt GetLastUseTime(
+ const TInt64 aSlpId,
+ TTime& aTime
+ ) const;
+
+ /**
+ * This method is used to change timestamp when the HSLP was used tried last time.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be changed
+ * @param [IN] aTime Time stamp
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrNotReady if this method is invoked before invoked before @ref LockSettingsL()
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt SetLastTriedTime(
+ const TInt64 aSlpId,
+ const TTime aTime
+ );
+
+ /**
+ * This method is used to retrieve timestamp when the HSLP was used tried last time.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be retrieved
+ * @param [OUT] aTime Time stamp
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt GetLastTriedTime(
+ const TInt64 aSlpId,
+ TTime& aTime
+ ) const;
+
+
+ /**
+ * This method is used to change network information when the SUPL session was last done.
+ * The SUPL session could be sucessful one or failed one.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be changed
+ * @param [IN] aNetType The network type
+ * @param [IN] aMcc Mobile country code. It can have value from 0 to 999
+ * @param [IN] aMnc Mobile network code. It can have value from 0 to 999
+ * @param [IN] aCid Cell Identity. It can have value from 0 to 65535 if aNetType is GSM or
+ * it can have value from 0 to 268435455 if aNetType is WCDMA
+ * @param [IN] aLac Location Aread Code. This parameter is written to settings only if aNetType is GSM.
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrNotReady if this method is invoked before invoked before @ref LockSettingsL()
+ * - KErrArgument if the SLP ID passed is not valid or any of the parameters passed is not in range
+ */
+ TInt SetNetInfoLastUse(
+ const TInt64 aSlpId,
+ const CSuplSettingsInternal::TSuplSettingsNetworkType aNetType,
+ const TInt aMcc,
+ const TInt aMnc,
+ const TInt aCid,
+ const TInt aLac=0
+ );
+
+ /**
+ * This method is used to retrieve network information when the SUPL session was last done.
+ * The SUPL session could be sucessful one or failed one.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be retrieved
+ * @param [OUT] aNetType The network type
+ * @param [OUT] aMcc Mobile country code. It can have value from 0 to 999
+ * @param [OUT] aMnc Mobile network code. It can have value from 0 to 999
+ * @param [OUT] aCid Cell Identity. It can have value from 0 to 65535 if aNetType is GSM or
+ * it can have value from 0 to 268435455 if aNetType is WCDMA
+ * @param [OUT] aLac Location Aread Code. This parameter is written to settings only if aNetType is GSM.
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt GetNetInfoLastUse(
+ const TInt64 aSlpId,
+ CSuplSettingsInternal::TSuplSettingsNetworkType& aNetType,
+ TInt& aMcc,
+ TInt& aMnc,
+ TInt& aCid,
+ TInt& aLac
+ ) const;
+
+ /**
+ * This method is used to change network information when the SUPL session was last done sucessfully.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be changed
+ * @param [IN] aNetType The network type
+ * @param [IN] aMcc Mobile country code. It can have value from 0 to 999
+ * @param [IN] aMnc Mobile network code. It can have value from 0 to 999
+ * @param [IN] aCid Cell Identity. It can have value from 0 to 65535 if aNetType is GSM or
+ * it can have value from 0 to 268435455 if aNetType is WCDMA
+ * @param [IN] aLac Location Aread Code. This parameter is written to settings only if aNetType is GSM.
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrNotReady if this method is invoked before invoked before @ref LockSettingsL()
+ * - KErrArgument if the SLP ID passed is not valid or any of the parameters passed is not in range
+ */
+ TInt SetNetInfoLastSucess(
+ const TInt64 aSlpId,
+ const CSuplSettingsInternal::TSuplSettingsNetworkType aNetType,
+ const TInt aMcc,
+ const TInt aMnc,
+ const TInt aCid,
+ const TInt aLac=0
+ );
+
+ /**
+ * This method is used to retrieve network information when the SUPL session was last done sucessfully.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be retrieved
+ * @param [OUT] aNetType The network type
+ * @param [OUT] aMcc Mobile country code. It can have value from 0 to 999
+ * @param [OUT] aMnc Mobile network code. It can have value from 0 to 999
+ * @param [OUT] aCid Cell Identity. It can have value from 0 to 65535 if aNetType is GSM or
+ * it can have value from 0 to 268435455 if aNetType is WCDMA
+ * @param [OUT] aLac Location Aread Code. This parameter is written to settings only if aNetType is GSM.
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt GetNetInfoLastSucess(
+ const TInt64 aSlpId,
+ CSuplSettingsInternal::TSuplSettingsNetworkType& aNetType,
+ TInt& aMcc,
+ TInt& aMnc,
+ TInt& aCid,
+ TInt& aLac
+ ) const;
+
+
+ /**
+ * This method is used to change parameter which indicates whether server
+ * supports emergency service or not.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be changed
+ * @param [IN] aEmergencySupportFlag Flag to indicate whether emergency service is supported or not
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt SetEmergencySupportFlag(
+ const TInt64 aSlpId,
+ const TBool aEmergencySupportFlag
+ );
+
+ /**
+ * This method is used to retrieve parameter which indicates whether server
+ * supports emergency service or not.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be retrieved
+ * @param [OUT] aEmergencySupportFlag Flag to indicate whether emergency service is supported or not
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are retrieved successfully.
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt GetEmergencySupportFlag(
+ const TInt64 aSlpId,
+ TBool& aEmergencySupportFlag
+ ) const;
+
+ /**
+ * This method is used to retrieve parameter which indicates whether server
+ * supports TLS or not.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be retrieved
+ * @param [OUT] aTlsFlag Flag to indicate whether TLS is enabled or not.
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt GetTlsFlag(const TInt64 aSlpId,TBool& aTlsFlag )const;
+
+ /**
+ * This method is used to change parameter which indicates whether server
+ * supports TLS or not.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be changed
+ * @param [IN] aTlsSupportFlag Flag to indicate whether TLS is needs to be enabled or not.
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrNotReady if this method is invoked before invoked before @ref LockSettingsL()
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt SetTlsSupportFlag(
+ const TInt64 aSlpId,
+ const TBool aTlsSupportFlag
+ );
+
+ /**
+ * This method is used to change parameter which indicates whether server
+ * supports PSK-TLS or not.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be changed
+ * @param [IN] aPskTlsSupportFlag Flag to indicate whether PSK-TLS is needs to be enabled or not.
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrNotReady if this method is invoked before invoked before @ref LockSettingsL()
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt SetPskTlsSupportFlag(
+ const TInt64 aSlpId,
+ const TBool aPskTlsSupportFlag
+ );
+
+ /**
+ * This method is used to retrieve parameter which indicates whether server
+ * supports PSK-TLS or not.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be retrieved
+ * @param [OUT] aPskTlsFlag Flag to indicate whether PSK-TLS needs to be enabled or not.
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt GetPskTlsFlag(
+ const TInt64 aSlpId,
+ TBool& aPskTlsFlag
+ ) const;
+
+ /**
+ * This method is used to change parameter which indicates whether server
+ * can be used for SUPL session or not.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be changed
+ * @param [IN] aEnable Flag to indicate whether server can be enabled or not
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrNotReady if this method is invoked before invoked before @ref LockSettingsL()
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt SetServerEnabledFlag(
+ const TInt64 aSlpId,
+ const TBool aEnable
+ );
+
+ /**
+ * This method is used to retrieve parameter which indicates whether server
+ * can be used for SUPL session or not.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be retrieved
+ * @param [OUT] aEnable Flag to indicate whether server can be enabled or not
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt GetServerEnabledFlag(
+ const TInt64 aSlpId,
+ TBool& aEnable
+ ) const;
+
+ /**
+ * This method is used to change parameter which indicates whether server
+ * details can be removed if SIM is changed.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be changed
+ * @param [IN] aSimChangeFlag Flag to indicate whether server can be removed or not if there is a SIM change
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrNotReady if this method is invoked before invoked before @ref LockSettingsL()
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt SetSimChangeRemoveFlag(
+ const TInt64 aSlpId,
+ const TBool aSimChangeFlag
+ );
+
+ /**
+ * This method is used to retrieve parameter which indicates whether server
+ * details can be removed if SIM is changed.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be retrieved
+ * @param [OUT] aSimChangeFlag Flag to indicate whether server can be removed or not if there is a SIM change
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt GetSimChangeRemoveFlag(
+ const TInt64 aSlpId,
+ TBool& aSimChangeFlag
+ ) const;
+
+ /**
+ * This method is used to change parameter which indicates whether server
+ * can be used out side home network or not.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be changed
+ * @param [IN] aHomeNwFlag Flag to indicate whether server can be used outside home network or not
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrNotReady if this method is invoked before invoked before @ref LockSettingsL()
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt SetUsageInHomwNwFlag(
+ const TInt64 aSlpId,
+ const TBool aHomeNwFlag
+ );
+
+ /**
+ * This method is used to retrieve parameter which indicates whether server
+ * can be used out side home network or not.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be retrieved
+ * @param [OUT] aHomeNwFlag Flag to indicate whether server can be used outside home network or not
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt GetUsageInHomwNwFlag(
+ const TInt64 aSlpId,
+ TBool& aHomeNwFlag
+ ) const;
+
+ /**
+ * This method is used to change parameter which indicates whether server
+ * details are editable or not.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be changed
+ * @param [IN] aEditFlag Flag to indicate whether server details are editable or not
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrNotReady if this method is invoked before invoked before @ref LockSettingsL()
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt SetEditableFlag(
+ const TInt64 aSlpId,
+ const TBool aEditFlag
+ );
+
+ /**
+ * This method is used to retrieve parameter which indicates whether server
+ * details are editable or not.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameter needs to be retrieved
+ * @param [OUT] aEditFlag Flag to indicate whether server details are editable or not
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrArgument if the SLP ID passed is not valid
+ */
+ TInt GetEditableFlag(
+ const TInt64 aSlpId,
+ TBool& aEditFlag
+ ) const;
+
+ /**
+ * This method is used to change all parameters of server in SUPL settings. The server identity
+ * in @ref CServerParams which is passed as parameter gives information on for which server
+ * entry the values needs to be changed. If the passed server identity does not exists in
+ * settings, error is returned.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aParamValues New value for server parameters.
+ * @ref CServerParams class
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrNotReady if this method is invoked before invoked before @ref LockSettingsL()
+ * - KErrArgument if the value of any of the pamater is not in range
+ * - KErrNotFound if the SLP Identity mentioned in aParamValues does not exist in settings
+ */
+
+ TInt SetAllParameter(
+ const CServerParams* aParamValues
+ );
+
+ /**
+ * This method is used to change all parameters of default server in SUPL settings. In this
+ * method server identity of @ref CServerParams passed is not considered and values
+ * of default server is updated except server identity. If none of the server is set
+ * as default, error is returned.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aParamValues Parameter for which the value needs to be changed
+ * @ref CServerParams class
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrNotReady if this method is invoked before invoked before @ref LockSettingsL()
+ * - KErrArgument if the value of any of the pamater is not in range
+ * - KErrNotFound if none of the server is set as default
+ */
+
+ TInt SetDefaultServer(
+ const CServerParams* aParamValues
+ );
+
+ /**
+ * This method is used to set one server as default in SUPL settings storage.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameters needs to be changed
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrNotReady if this method is invoked before invoked before @ref LockSettingsL()
+ * - KErrNotFound if the specified server identity does not exists in the settings
+ */
+
+ TInt SetAsDefault(
+ const TInt64 aSlpId
+ );
+
+ /**
+ * This method is used to retrieve default SLP identification.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [OUT] aSlpId SLP ID of default server
+ *
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are retrieved successfully.
+ * - KErrNotFound if settings does not have any server entries or if none of server is marked as default
+ *
+ */
+ TInt GetDefaultSlpId(
+ TInt64& aSlpId
+ ) const;
+
+ /**
+ * This method is deletes server entry from SUPL settings storage.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId Server identity for which the entery needs to be deleted from the SUPL settings storage
+ *
+ * @return one of the following error codes:
+ * - KErrNone if entry is deleted sucessfully
+ * - KErrNotFound if the specified server identity does not exists in settings storage
+ *
+ */
+ TInt RemoveServer(TInt64 aSlpId);
+
+ /**
+ * This method is changes the priority of the server to the specified priority.
+ *
+ * @since S60 9.1TB
+ *
+ *
+ * @param [IN] aSlpId Server identity for which the priority needs to be changed
+ * @param [IN] aPriority Number of positions to move
+ * @param [IN] aDirection Whether to increase or decrease priority.
+ *
+ * @return one of the following error codes:
+ * - KErrNone if the priority is changed sucessfully
+ * - KErrNotFound if the specified server identity does not exists in settings storage
+ * - KErrArgument if the specified priority is not valid (eg. negative)
+ *
+ */
+ IMPORT_C TInt ChangePriority(
+ TInt64 aSlpId,
+ TInt aPriority,
+ TBool aDirection
+ );
+
+
+
+ /**
+ * This method is used to retrieve all properties of default server from SUPL settings storage.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [OUT] aParamValues Retrieves values from SUPL Settings storage
+ * @ref CServerParams class
+ *
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are retrieved successfully.
+ * - KErrNotFound if the settings does not have any server entry
+ *
+ */
+ TInt GetDefaultServer(
+ CServerParams* aParamValues
+ ) const;
+ #if 0
+ /**
+ * This method is used to retrieve properties of all servers from SUPL settings storage.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [OUT] aParamValues Array of retrieved server entries
+ * @ref CServerParams class
+ *
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are retrieved successfully.
+ * - KErrNotFound if the settings does not have any server entry
+ *
+ */
+ TInt GetAllSlp(
+ RPointerArray<CServerParams> aParamValues,
+ TRequestStatus& aStatus
+ ) const;
+ #endif
+ /**
+ * This method enables or disables the fall back in SUPL settings storage.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aFallBack Indicates whether the fallback needs to be enabled or disabled
+ *
+ * @return one of the following error codes:
+ * - KErrNone if the fallback value changed sucessfully
+ * - KErrGeneral if the fallback is enabled when only one server entry is present
+ */
+ TInt SetFallBack(TBool aFallBack);
+
+ /**
+ * This method retrieves the fallback value from SUPL settings storage
+ *
+ * @since S60 9.1TB
+ *
+ * @param [OUT] aFallBack Retrived fallback value
+ *
+ * @return one of the following error codes:
+ * - KErrNone if the fallback value retrieved sucessfully
+ */
+ TInt GetFallBack(TBool& aFallBack) const;
+
+ /**
+ * This method gets the fall back timer from SUPL settings storage.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aFallBack Indicates whether the fallback needs to be enabled or disabled
+ *
+ * @return one of the following error codes:
+ * - KErrNone if the fallback value changed sucessfully
+ * - KErrGeneral if the fallback is enabled when only one server entry is present
+ */
+ TInt GetFallBackTimer(TInt& aTimerValue) const;
+
+ /**
+ * This method sets the fall back timer value in SUPL settings storage.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aFallBack Indicates whether the fallback needs to be enabled or disabled
+ *
+ * @return one of the following error codes:
+ * - KErrNone if the fallback value changed sucessfully
+ * - KErrGeneral if the fallback is enabled when only one server entry is present
+ */
+ TInt SetFallBackTimer(TBool aTimerValue);
+
+ /**
+ * This method is used to retrieve all properties of server from SUPL settings storage
+ * based on SLP identification.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP ID for which the parameters needs to be changed
+ * @param [OUT] aParamValues Parameter for which the value needs to be changed
+ * @ref CServerParams class
+ *
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are retrieved successfully.
+ * - KErrArgument if any of the argument passed is not valid
+ * - KErrNotFound if the specified server does not exists in the settings
+ *
+ */
+ TInt GetSlpInfoFromId(
+ const TInt64 aSlpId,
+ CServerParams* aParamValues
+ ) const;
+
+ /**
+ * This method is used to retrieve all properties of server from SUPL settings storage
+ * based on SLP address.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aServerAddress SLP address for which the parameters needs to be changed
+ * @param [OUT] aParamValues Parameter for which the value needs to be changed
+ * @ref CServerParams class
+ *
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are retrieved successfully.
+ * - KErrArgument if any of the argument passed is not valid
+ * - KErrNotFound if the specified server does not exists in the settings
+ *
+ */
+ TInt GetSlpInfoAddress(
+ const TDesC& aServerAddress,
+ CServerParams* aParamValues
+ ) const;
+
+ /**
+ * This method is used to retrieve number of server entries present in SUPL settings.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [OUT] aCount Number of SLP entries
+ *
+ * @return one of the following error codes:
+ * - KErrNone if number of SLP entries are calculated
+ * - KErrNotFound if the settings does not have any server entry
+ *
+ */
+ TInt SlpCount(
+ TInt& aCount
+ );
+
+ /**
+ * This method is used check whether server entry exists or not based on SLP
+ * identification
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aSlpId SLP identification
+ *
+ * @return one of the following codes:
+ * - ETrue if server entry exists in settings
+ * - EFalse if server entry does not exists in settings
+ *
+ */
+ TBool IsSlpExists(
+ const TInt64 aSlpId
+ );
+
+ /**
+ * This method is used check whether server entry exists or not based on SLP
+ * address
+ *
+ * @since S60 9.1TB
+ *
+ * @param [IN] aServerAddress Server address
+ *
+ * @return one of the following codes:
+ * - ETrue if server entry exists in settings
+ * - EFalse if server entry does not exists in settings
+ *
+ */
+ TBool IsSlpExists(
+ const TDesC& aServerAddress
+ );
+
+
+ /**
+ * This synchronous method is used to retrieve properties of all servers from SUPL settings storage.
+ * This method retrieves all properties for each server.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [OUT] aParamValues Array of retrieved server entries
+ * @ref CServerParams class
+ *
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are retrieved successfully.
+ * - KErrNotFound if the settings does not have any server entry
+ *
+ */
+ TInt GetAllSlp(
+ RPointerArray<CServerParams>& aParamValues
+ );
+
+ /**
+ * This method is used to retrieve properties of all servers from SUPL settings storage.
+ * This method retrieves all properties for each server.
+ *
+ * @since S60 9.1TB
+ *
+ * @param [OUT] aParamValues Array of retrieved server entries
+ * @ref CServerParams class
+ *
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are retrieved successfully.
+ * - KErrNotFound if the settings does not have any server entry
+ *
+ */
+ TInt GetAllSlp(
+ RPointerArray<CServerParams>& aParamValues,
+ TRequestStatus& aStatus
+ );
+ /**
+ * This method is used to delete all servers which have the Sim Change Remove Flag set
+ *
+ * @since S60 9.1TB
+ *
+ *
+ * @return one of the following error codes:
+ * - KErrNone if entries were deleted.
+ * - KErrGeneral if changing settings failed
+ *
+ */
+ TInt RemoveOnSimChange();
+
+ /**
+ * This method is used to retrieve properties of all active triggers.
+ *
+ * @since S60 5.2
+ *
+ * @param [OUT] aParamValues Array of retrieved trigger parameters
+ * @ref CTriggerParams class
+ *
+ * @return one of the following error codes:
+ * - KErrNone if active trigger parameters are retrieved successfully.
+ * - KErrNotFound if there are no active triggers
+ * otherwise system wide error codes.
+ *
+ */
+ TInt GetTriggerParams( RPointerArray<CTriggerParams>& aParamValues ) const;
+
+ /**
+ * This method is used to retrieve properties of a given active trigger.
+ *
+ * @since S60 5.2
+ *
+ * @param [IN] aSessionId Session identifier to get paramater of particular session
+ * @param [OUT] aParamValues Parameters for a given session
+ * @ref CTriggerParams class
+ *
+ * @return one of the following error codes:
+ * - KErrNone if active trigger parameters are retrieved successfully.
+ * - KErrNotFound if there is no active session with given id
+ * otherwise system wide error codes.
+ *
+ */
+
+ TInt GetTriggerParams( TInt64 aSessionId,CTriggerParams*& aParamValues ) const;
+
+ /**
+ * Sets Notification status of particular session
+ *
+ * @since S60 5.2
+ * @param [IN] aSessionId Session identifier to get/change paramater of particular session
+ * @param [IN] aTriggerNotificationStaus Indicates whether notification needs to be shown or
+ * not after every trigger fired
+ *
+ * @return following error codes
+ * - KErrNone if successful
+ * - KErrNotFound if there is no active session with given id
+ * otherwise system wide error codes.
+ */
+ TInt SetNotificationStatus( TInt64 aSessionId,
+ TBool aTriggerNotificationStatus
+ );
+
+ /**
+ * Sets number of outstanding triggers for a particular session
+ *
+ * @since S60 5.2
+ * @param [IN] aSessionId Session identifier to get/change paramater of particular session
+ * @param [IN] aOutstandingTriggers Indicates number of outstanding triggers for a given session
+ *
+ * @return following error codes
+ * - KErrNone if successful
+ * - KErrNotFound if there is no active session with given id
+ * otherwise system wide error codes.
+ */
+
+ TInt SetOutstandingTriggers( TInt64 aSessionId,TUint64 aOutstandingTriggers );
+
+ /*
+ * Cancels given ongoing triggering session
+ *
+ * @since S60 5.2
+ * @param [IN] aSessionId Session identifier
+ *
+ * @return following error codes
+ * - KErrNone if successful
+ * - KErrNotFound if session is not found
+ * otherwise system wide error codes.
+ */
+ TInt CancelTriggerSession( TInt64 aSessionId );
+
+
+ /**
+ * This method is used to insert Active session record into the SUPL session DB
+ * @since S605.2
+ *
+ * @param [IN] aSessionParamValues The CServerParams pointer containing trigger session params
+ * to be added to the DB
+ * - KErrNone if successful
+ * otherwise system wide error codes.
+ */
+ TInt InsertSessionRecord(const CTriggerParams* aSessionParamValues);
+
+ /**
+ * This method is used to delete a session record corresponding to the given session ID
+ * @since S60 5.2
+ * @param [OUT] aSessionId The session ID of the session that is to be deleted
+ * - KErrNone if successful
+ * - KErrNotFound if session is not found
+ * otherwise system wide error codes.
+ */
+ TInt DeleteSessionRecord(TInt64 aSessionId);
+
+ /**
+ * This method is used to delete all session records from session table
+ * @since S60 5.2
+ * - KErrNone if successful
+ * otherwise system wide error codes.
+ */
+
+ TInt DeleteAllSessionRecords();
+
+ /**
+ * This method is used to retrieve extended parameters of given server
+ * @since S60 5.2
+ */
+
+ TInt GetServerExtensionParams( TInt64 aSlpId,CServerExtensionParams* aServerExtnParams ) const;
+
+ /**
+ * This method is used to set extended parameters of a given server.
+ * @since S60 5.2
+ */
+
+ TInt SetServerExtensionParams( TInt64 aSlpId,CServerExtensionParams* aServerExtnParams );
+
+ /**
+ * This method is used to read the default configured IAP name from the product config
+ * central repository.
+ * @since S60 5.2
+ */
+ TInt GetDefaultIAPName(TDes& aIapName);
+
+ private: // New functions
+ void HandleNetInfoRequestComplete(TInt aErr, RMobilePhone::TMobilePhoneSubscriberId aImsi);
+ void HandleMncInfoRequestComplete(TInt aErr, TInt aMcc, TInt aMnc);
+ TInt GetMncLen(TInt aMcc);
+
+ private:
+ // By default, prohibit copy constructor
+ CSuplSettingsEngine( const CSuplSettingsEngine& );
+ // Prohibit assigment operator
+ CSuplSettingsEngine& operator= ( const CSuplSettingsEngine& );
+
+ private: // Data
+ TEtelReqState iState;
+ CRepository* iRepository;
+
+ RMobilePhone::TMobilePhoneSubscriberId iImsi;
+ RTelServer iTelServer;
+ RMobilePhone iMobPhone;
+ RMobilePhone::TMobilePhoneNetworkInfoV1 iNetworkInfo;
+ RMobilePhone::TMobilePhoneNetworkInfoV1Pckg iNetworkInfoPkg;
+ RMobilePhone::TMobilePhoneLocationAreaV1 iLocationInfo;
+ TRequestStatus* iStatus;
+ TBool iInitDone;
+ TBool iInitPassed;
+ TFileName iTsyName;
+ TInt iMcc;
+ TInt iMnc;
+ //pointer to the DB Handler Class that accesses the Settings Db
+ CSettingsDatabaseHandler* iSettingsDBHandler;
+ };
+
+#endif // __EPOS_CSUPLSETTINGSENGINE_H__
+
+// End of File