telephonyprotocols/csdagt/src/ND_DBACC.CPP
changeset 0 3553901f7fa8
child 19 630d2f34d719
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyprotocols/csdagt/src/ND_DBACC.CPP	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,681 @@
+// Copyright (c) 2000-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:
+// CCommsDbNetDialAccess definitions
+// 
+//
+
+/**
+ @file nd_dbacc.cpp 
+*/
+
+#include <nifvar.h>
+	#include <commsdattypesv1_1.h>
+	#include <commsdatutils.h>
+	using namespace CommsDat;
+#include "ND_DBACC.H"
+#include "SLOGGER.H"
+#include "ND_STD.H"
+
+/**
+@internalComponent
+*/
+const TUint32 KZeroFieldValue=0uL;
+
+CCommsDbNetDialAccess* CCommsDbNetDialAccess::NewL(CCommsDbAccess* aDbAccess)
+/**
+2 phased constructor, first phase.
+
+@param aDbAccess a pointer to the database accessor.
+@exception Leaves if CCommsDbNetDialAccess() constructor leaves, or not enough memory is available.
+@return a new CCommsDbNetDialAccess object.
+*/
+	{
+	return new(ELeave) CCommsDbNetDialAccess(aDbAccess);
+	}
+
+CCommsDbNetDialAccess::CCommsDbNetDialAccess(CCommsDbAccess* aDbAccess)
+	: iDbAccess(aDbAccess)
+/**
+Private constructor used in the first phase of construction.
+
+@param aDbAccess a pointer to the database accessor.
+*/
+	{}
+
+CCommsDbNetDialAccess::~CCommsDbNetDialAccess()
+/**
+Destructor.
+*/
+	{}
+
+void CCommsDbNetDialAccess::Close()
+/**
+Closes database accessor.
+*/
+	{
+	iDbAccess->Close();
+	}
+
+void CCommsDbNetDialAccess::GetTsyNameL(TDes& aTsyName)
+/**
+Gets TSY name from database.
+
+@param aTsyName a reference to the TSY name that is read from database.
+@exception Leaves if GetTsyNameL() leaves.
+*/
+	{
+	iDbAccess->GetTsyNameL(aTsyName);
+	}	
+
+void CCommsDbNetDialAccess::SetCommPortL(const RCall::TCommPort& aCommPort)
+/**
+Sets COMM-port into database.
+
+@param aCommPort a reference to the COMM-port written into database.
+@exception Leaves if SetCommPortL() leaves.
+*/
+	{
+	iDbAccess->SetCommPortL(aCommPort);
+	}
+
+void CCommsDbNetDialAccess::GetCommPortForDirectConnectL(RCall::TCommPort& aCommPort)
+/**
+Get comm port details for direct connection.
+
+@param aCommPort a reference to the COMM-port read from database.
+@exception Leaves if ReadTextL() leaves.
+*/
+	{
+		CCommsDbAccess::CCommsDbAccessModemTable* modemTable = iDbAccess->ModemTable();
+		CleanupStack::PushL(modemTable);
+		if (modemTable == 0)
+			{
+			User::Leave(KErrNoMemory); // most likely?
+			}
+		
+		aCommPort.iCsy = static_cast<CCDModemBearerRecord*>(modemTable->iRecord)->iCsyName;
+		aCommPort.iPort = static_cast<CCDModemBearerRecord*>(modemTable->iRecord)->iPortName;
+
+		CleanupStack::PopAndDestroy(modemTable);
+	}
+
+void CCommsDbNetDialAccess::GetBcaStackL(TDes& aBcaStack)
+/**
+Gets the Bca Stack
+
+@param aBcaStack the BcaStack
+@exception Leaves if ReadTextL() leaves.
+*/
+	{
+		CCommsDbAccess::CCommsDbAccessModemTable* modemTable = iDbAccess->ModemTable();
+		CleanupStack::PushL(modemTable);
+		if (modemTable == 0)
+			{
+			User::Leave(KErrNoMemory); // most likely?
+			}
+		
+		aBcaStack = static_cast<CCDModemBearerRecord*>(modemTable->iRecord)->iBcaStack;
+
+		CleanupStack::PopAndDestroy(modemTable);
+	}
+
+TInt CCommsDbNetDialAccess::GetIapId()
+	{
+	_LIT(KIAPId, "IAP\\Id");
+
+	TUint32 iap;
+	TInt err = iDbAccess->ReadInt(KIAPId(), iap);
+	return (err == KErrNone) ? iap : err;
+	}
+
+void CCommsDbNetDialAccess::GetCommConfigForDirectConnectL(TCommConfig& aCommConfig)
+/**
+Get settings from modem config settings for data bits, stop bits and parity
+and get appropriate handshaking for direct connection.
+
+@param aCommConfig a reference to the configuration read for connection.
+@exception Leaves if PopulateModemCommSettingsL() leaves.
+*/
+	{
+	TCommConfigV01& cfg=aCommConfig();
+	PopulateModemCommSettingsL(cfg);
+	// DSRFail not asserted for battery powered modems that switch on with DTR High
+	cfg.iHandshake&=(~(KDCDHandshakeMask | KDSRFailHandshakeMask | KCTSHandshakeMask));
+	// Should be 0 for correct script operation
+	cfg.iTerminatorCount=0;
+	}
+
+void CCommsDbNetDialAccess::GetCommPortRoleL(TCommRole& aRole)
+/**
+Get comm port role (DCE or DTE)
+
+@param aRole a reference to the role read from the database
+@exception Leaves if ReadUintL() leaves.
+*/
+	{
+	TUint32 dummy = KZeroFieldValue;
+		CCommsDbAccess::CCommsDbAccessModemTable* modemTable = iDbAccess->ModemTable();
+		CleanupStack::PushL(modemTable);
+		if (modemTable == 0)
+			{
+			User::Leave(KErrNoMemory); // most likely?
+			}
+
+		dummy = static_cast<CCDModemBearerRecord*>(modemTable->iRecord)->iCommRole;	
+		if (dummy & KModemCommRoleDCE)
+			{
+			aRole = ECommRoleDCE;	
+			}			
+		else
+			{
+			aRole = ECommRoleDTE;	
+			}				
+
+		CleanupStack::PopAndDestroy(modemTable);
+	
+	}
+
+void CCommsDbNetDialAccess::GetCallParamsL(RCall::TCallParams& aParams)
+/**
+Parse info about speaker settings and pause time from modem prefs and location table
+into TCallParams struct. Assume we require a location as we are dialling a number.
+
+@param aParams a reference to the Core API call parameters read from database.
+@exception Leaves if ReadUintL(), GetIntL() or GetBoolL() leaves.
+*/
+	{
+	TUint32 value=KZeroFieldValue;
+		CCommsDbAccess::CCommsDbAccessModemTable* modemTable = iDbAccess->ModemTable();
+		CleanupStack::PushL(modemTable);
+		if (modemTable == 0)
+			{
+			User::Leave(KErrNoMemory); // most likely?
+			}
+
+		value = static_cast<CCDModemBearerRecord*>(modemTable->iRecord)->iSpeakerPref;
+		
+	switch (value)
+		{
+		case EModemSpeakerSettingNever:
+			aParams.iSpeakerControl=RCall::EMonitorSpeakerControlAlwaysOff;
+			break;
+		case EModemSpeakerSettingUntilCallAnswered:
+			aParams.iSpeakerControl=RCall::EMonitorSpeakerControlOnUntilCarrier;
+			break;
+		case EModemSpeakerSettingAlways:
+			aParams.iSpeakerControl=RCall::EMonitorSpeakerControlAlwaysOn;
+			break;
+		case EModemSpeakerSettingAfterDialUntilAnswer:
+			aParams.iSpeakerControl=RCall::EMonitorSpeakerControlOnExceptDuringDialling;
+			break;
+		default:
+			aParams.iSpeakerControl=RCall::EMonitorSpeakerControlUnknown;
+			break;
+		}
+	
+		value = static_cast<CCDModemBearerRecord*>(modemTable->iRecord)->iSpeakerVolPref;
+
+		CleanupStack::PopAndDestroy(modemTable);
+	switch (value)
+		{
+		case EModemSpeakerVolumeQuiet:
+			aParams.iSpeakerVolume=RCall::EMonitorSpeakerVolumeLow;
+			break;
+		case EModemSpeakerVolumeMedium:
+			aParams.iSpeakerVolume=RCall::EMonitorSpeakerVolumeMedium;
+			break;
+		case EModemSpeakerVolumeLoud:
+			aParams.iSpeakerVolume=RCall::EMonitorSpeakerVolumeHigh;
+			break;
+		default:
+			aParams.iSpeakerVolume=RCall::EMonitorSpeakerVolumeUnknown;
+			break;
+		}
+	
+	TPtrC loc(LOCATION);
+	iDbAccess->GetIntL(loc,TPtrC(LOCATION_PAUSE_AFTER_DIAL_OUT),value);
+	aParams.iInterval=(TUint)value;
+
+	TBool bValue;
+	iDbAccess->GetBoolL(loc,TPtrC(LOCATION_WAIT_FOR_DIAL_TONE),bValue);
+	if (bValue)
+		{
+		aParams.iWaitForDialTone=RCall::EDialToneWait;
+		}
+	else
+		{
+		aParams.iWaitForDialTone=RCall::EDialToneNoWait;
+		}
+	}
+
+TInt CCommsDbNetDialAccess::GetRedialAttempts(TUint32& aAttempts)
+/**
+Reads amount of redial attempts from database.
+
+@param aAttempts a reference to redial attempts read from database.
+@return an error code trapped if GetGlobalL() leaves.
+*/
+	{
+	TRAPD(ret,iDbAccess->GetGlobalL(TPtrC(REDIAL_ATTEMPTS),aAttempts));
+	return ret;
+	}
+
+void CCommsDbNetDialAccess::GetRemoteParty(TDes& aRemoteParty)
+/**
+Read ISP name from database and return as remote party.
+
+@param aRemoteParty a reference to ISP name read from database.
+@exception Leaves if GetDesL() leaves.
+*/
+	{
+	TInt ret(KErrNone);
+	TPtrC name(COMMDB_NAME);
+
+	ret = AssertDialOutTable();
+	if (ret != KErrNone)
+		{
+		//if AssertDialOutTable encounters serios errors (OOM)
+		//it must set aRemoteParty appropriatelly
+		_LIT(unknownParty,"???");
+		aRemoteParty=unknownParty;
+		return;
+		}
+
+	TRAP(ret,iDbAccess->GetDesL(TPtrC(IAP),name,aRemoteParty));
+
+	if(ret!=KErrNone)
+		{
+		_LIT(unknownParty,"???");
+		aRemoteParty=unknownParty;
+		}
+	}
+
+void CCommsDbNetDialAccess::IsDefaultTelNumL(TBool& aIsTelNum)
+/**
+Check length of default tel no - if 0 set boolean to false, else true.
+Only for dial out
+
+@param aIsTelNum a reference to the default tel num read from database.
+@exception Leaves if GetDesL() leaves.
+
+*/
+	{
+	User::LeaveIfError(AssertDialOutTable());
+
+	TDialString telNum;
+	iDbAccess->GetDesL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_DEFAULT_TEL_NUM),telNum);
+	if (telNum.Length()==0) 
+		aIsTelNum=EFalse;
+	else
+		aIsTelNum=ETrue;
+	}
+
+void CCommsDbNetDialAccess::GetUsePctL(TBool& aUsePct)
+/**
+Read the DisplayPct boolean from the ISP database
+Only for dial out
+
+@param aUsePct a reference to the DisplayPct boolean read from database.
+@exception Leaves if GetBoolL() leaves.
+*/
+	{
+	User::LeaveIfError(AssertDialOutTable());
+	iDbAccess->GetBoolL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_DISPLAY_PCT),aUsePct);
+	}
+
+void CCommsDbNetDialAccess::GetScriptDetailsL(TBool& aUseScript, TInt& aLength)
+/**
+Get the length of the script into aLength.
+Dial in or dial out.
+
+@param aUseScript a reference to the script boolean read from database.
+@param aLength a reference to the lenght of script read from database.
+@exception Leaves if GetBoolL() or GetLengthOfLongDesL() leaves.
+*/
+	{
+	User::LeaveIfError(AssertDialOutTable());
+	iDbAccess->GetBoolL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_USE_LOGIN_SCRIPT),aUseScript);
+	aLength=iDbAccess->GetLengthOfLongDesL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_LOGIN_SCRIPT));
+	}	
+
+HBufC* CCommsDbNetDialAccess::GetScriptLC()
+/**
+Return the script.
+Dial in or dial out.
+
+@exception Leaves if GetBoolL() or GetLengthOfLongDesL() leaves.
+@return as HBufC* the login script read from database.
+*/
+	{
+	User::LeaveIfError(AssertDialOutTable());
+	return iDbAccess->GetLongDesLC(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_LOGIN_SCRIPT));
+	}
+
+void CCommsDbNetDialAccess::GetLoginParamsL(TBool& aPromptForLogin,TDes& aLoginName,TDes& aLoginPass,TDes& aIPAddress)
+/**
+Get boolean PromptForLogin and login name, login password and IP address
+Dial out only.
+
+@param aPromptForLogin a reference to the prompt boolean read from database.
+@param aLoginName a reference to the login name read from database.
+@param aLoginPass a reference to the login password read from database.
+@param aIPAddress a reference to the ISP IP address read from database.
+@exception Leaves if GetBoolL() or GetDesL() leaves.
+*/
+	{
+	User::LeaveIfError(AssertDialOutTable());
+
+	iDbAccess->GetBoolL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_PROMPT_FOR_LOGIN),aPromptForLogin);
+	iDbAccess->GetDesL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_LOGIN_NAME),aLoginName);
+	iDbAccess->GetDesL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_LOGIN_PASS),aLoginPass);
+	iDbAccess->GetDesL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_IP_ADDR),aIPAddress);
+	}
+
+TInt CCommsDbNetDialAccess::GetCallbackTimeout(TUint32& aTimeout)
+/**
+Get call back timeout.
+
+@param aTimeout a reference to the dial out time read from database.
+@return an error code trapped if GetIntL() leaves.
+*/
+	{
+	TInt ret = AssertDialOutTable();
+	if (ret != KErrNone)
+		return ret;
+
+	TRAP(ret,iDbAccess->GetIntL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_CALLBACK_TIMEOUT),aTimeout));
+	return ret;
+	}
+
+TBool CCommsDbNetDialAccess::HscsdSettingsAvailableL()
+/**
+Check if HSCSD settings are available in database.
+
+@return ETrue if bearer type in database is EBearerTypeHSCSD. Else return EFalse.
+*/
+	{
+	User::LeaveIfError(AssertDialOutTable());
+
+	TUint32 temp=0uL;
+	TRAPD(ret,iDbAccess->GetIntL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_BEARER_TYPE),temp));
+	if (ret==KErrUnknown)
+		return EFalse;
+	User::LeaveIfError(ret);	// any other error
+	if ((TCommsDbBearerType)temp==EBearerTypeHSCSD)
+		return ETrue;
+	return EFalse;
+	}
+
+void CCommsDbNetDialAccess::GetMmHscsdParametersL(RMobileCall::TMobileHscsdCallParamsV1& aMmHscsdParams)
+/**
+Get Multimode HSCSD call parameters..
+
+@param aMmHscsdParams a reference to the multimode HSCSD call parameters read from database.
+@exception Leaves if GetIntL or GetBoolL() leaves.
+*/
+	{
+	User::LeaveIfError(AssertDialOutTable());
+
+	TUint32 temp=0uL;
+	TPtrC serviceTableName(DIAL_OUT_ISP);
+	iDbAccess->GetIntL(serviceTableName,TPtrC(ISP_AIUR),temp);
+	aMmHscsdParams.iWantedAiur=(RMobileCall::TMobileCallAiur)temp;
+	iDbAccess->GetIntL(serviceTableName,TPtrC(ISP_REQUESTED_TIME_SLOTS),temp);
+	aMmHscsdParams.iWantedRxTimeSlots=(TInt)temp;
+	iDbAccess->GetIntL(serviceTableName,TPtrC(ISP_MAXIMUM_TIME_SLOTS),temp);
+	aMmHscsdParams.iMaxTimeSlots=(TInt)temp;
+	iDbAccess->GetIntL(serviceTableName,TPtrC(ISP_CHANNEL_CODING),temp);
+	aMmHscsdParams.iCodings=(TUint32)temp;
+	iDbAccess->GetIntL(serviceTableName,TPtrC(ISP_ASYMMETRY),temp);
+	aMmHscsdParams.iAsymmetry=(RMobileCall::TMobileCallAsymmetry)temp;
+	TBool b;
+	iDbAccess->GetBoolL(serviceTableName,TPtrC(ISP_USER_INIT_UPGRADE),b);
+	aMmHscsdParams.iUserInitUpgrade=b;
+	}
+
+TBool CCommsDbNetDialAccess::GetMmCallParams(RMobileCall::TMobileDataCallParamsV1& aMmParams)
+/**
+Get Multimode data call parameters. If the parameters can be read from database,
+return ETrue, else return EFalse.
+
+@param aMmParams a reference to the multimode data call parameters read from database.
+@return ETrue if multimode data call parameters are read successfully. Else return EFalse.
+*/
+	{
+	TInt ret = AssertDialOutTable();
+	if (ret!=KErrNone)
+		return EFalse;
+
+	TUint32 temp=0uL;
+	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_BEARER_SERVICE),temp));
+	if (ret!=KErrNone)
+		return EFalse;
+	aMmParams.iService=(RMobileCall::TMobileCallDataService)temp;
+	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_BEARER_SPEED),temp));
+	if (ret!=KErrNone)
+		return EFalse;
+	aMmParams.iSpeed=(RMobileCall::TMobileCallDataSpeed)temp;
+	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_BEARER_PROTOCOL),temp));
+	if (ret!=KErrNone)
+		return EFalse;
+	aMmParams.iProtocol=(RMobileCall::TMobileCallDataProtocol)temp;
+	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_BEARER_CE),temp));
+	if (ret!=KErrNone)
+		return EFalse;
+	aMmParams.iQoS=(RMobileCall::TMobileCallDataQoS)temp;
+	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_RLP_VERSION),temp));
+	if (ret!=KErrNone)
+		return EFalse;
+	aMmParams.iRLPVersion=(RMobileCall::TMobileCallDataRLPVersion)temp;
+	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_IWF_TO_MS),temp));
+	if (ret!=KErrNone)
+		return EFalse;
+	aMmParams.iModemToMSWindowSize=(TInt)temp;
+	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_MS_TO_IWF),temp));
+	if (ret!=KErrNone)
+		return EFalse;
+	aMmParams.iMSToModemWindowSize=(TInt)temp;
+	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_ACK_TIMER),temp));
+	if (ret!=KErrNone)
+		return EFalse;
+	aMmParams.iAckTimer=(TInt)temp;
+	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_RETRANSMISSION_ATTEMPTS),temp));
+	if (ret!=KErrNone)
+		return EFalse;
+	aMmParams.iRetransmissionAttempts=(TInt)temp;
+	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_RESEQUENCE_PERIOD),temp));
+	if (ret!=KErrNone)
+		return EFalse;
+	aMmParams.iResequencingPeriod=(TInt)temp;
+	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_V42_COMPRESSION),temp));
+	if (ret!=KErrNone)
+		return EFalse;
+	aMmParams.iV42bisReq=(RMobileCall::TMobileCallDataV42bis)temp;
+	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_V42_CODEWORDS),temp));
+	if (ret!=KErrNone)
+		return EFalse;
+	aMmParams.iV42bisCodewordsNum=(TInt)temp;
+	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_V42_MAX_LENGTH),temp));
+	if (ret!=KErrNone)
+		return EFalse;
+	aMmParams.iV42bisMaxStringLength=(TInt)temp;
+	TBool useEdge;
+	TRAP(ret,iDbAccess->GetBoolL(KGeneralServiceTable,TPtrC(ISP_USE_EDGE),useEdge));
+	if (ret!=KErrNone)
+		return EFalse;
+	aMmParams.iUseEdge=useEdge;
+	return ETrue;
+	}
+
+void CCommsDbNetDialAccess::CopyIspInitStringToModemL()
+/**
+Copy over ISP init string from ISP to modem table.
+
+@exception Leaves if GetDesL(), UpdateRecord() or PutRecordChanges() leaves.
+*/
+	{
+	TBuf8<KCommsDbSvrMaxFieldLength> initStringIsp;
+	iDbAccess->GetDesL (KGeneralServiceTable, TPtrC (ISP_INIT_STRING), initStringIsp);
+	TBuf8<KCommsDbSvrMaxFieldLength> initStringModem;	
+
+	CCommsDbAccess::CCommsDbAccessModemTable* modemTable = iDbAccess->ModemTable();
+	CleanupStack::PushL(modemTable);
+	if (modemTable == 0)
+		{
+		User::Leave(KErrNoMemory); // most likely?
+		}
+
+	initStringModem = static_cast<CCDModemBearerRecord*>(modemTable->iRecord)->iModemInitString;
+
+	if (initStringIsp.CompareF (initStringModem) != 0)
+		{
+		modemTable->iRecord->RefreshL(*(modemTable->iSession));
+		static_cast<CCDModemBearerRecord*>(modemTable->iRecord)->iModemInitString = initStringIsp;
+		modemTable->iRecord->ModifyL(*(modemTable->iSession));
+		} 
+
+	CleanupStack::PopAndDestroy(modemTable);
+	}
+
+void CCommsDbNetDialAccess::DoDiallingResolutionL(TDialString& aTelNum, TParseMode aMode)
+/**
+Decide which phone number to use by checking alternative locations and do correct dialling 
+resolution. Write correct dial string back to aTelNum.
+Only for dial out.
+
+@param aTelNum a reference to the telephone number resolved in database.
+@param aMode a parse mode passed for parsing.
+@exception Leaves if GetDesL(), GetBoolL(), SetUnresolvedDialStringL(), GetIntL() or ResolvePhoneNumberL() leaves.
+*/
+	{
+	User::LeaveIfError(AssertDialOutTable());
+	TDialString fullNum;
+	iDbAccess->GetDesL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_DEFAULT_TEL_NUM),fullNum);
+	TBool doDiallingResolution;
+	iDbAccess->GetBoolL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_DIAL_RESOLUTION),doDiallingResolution);
+
+	if(!doDiallingResolution || fullNum.Length()==0)
+		{
+		SetUnresolvedDialStringL(aTelNum,fullNum,aMode);
+		}
+	else
+		{
+		TUint32 chargecardId=KZeroFieldValue;
+		TInt ret=KErrNone;
+
+		TRAP(ret,iDbAccess->GetIntL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_CHARGECARD),chargecardId));
+
+		if (ret==KErrUnknown)		// don't care if there isn't one
+			{
+			ret=KErrNone;
+			}
+		
+		User::LeaveIfError(ret);
+		CommsDatUtils::CCommsDatUtils::ResolvePhoneNumberL(fullNum,aTelNum,aMode,iDbAccess->LocationId(),chargecardId);
+		}
+	}
+
+// Private functions 
+
+TInt CCommsDbNetDialAccess::AssertDialOutTable() const
+/**
+Reads service type from database.
+
+@exception Panics if GetServiceTypeL() leaves or service type read from database is not DIAL_OUT_ISP.
+*/
+	{
+	TBuf<KCommsDbSvrMaxFieldLength> serviceType;
+	TRAPD(ret, iDbAccess->GetServiceTypeL(serviceType));
+	if (ret == KErrNone && serviceType!=TPtrC(DIAL_OUT_ISP))
+		{
+		NetDialPanic(EIllegalDbRequestForService);
+		}
+
+	return ret;
+	}
+
+void CCommsDbNetDialAccess::SetUnresolvedDialStringL(TDialString& aTelNum,const TDialString& aFullNum, TParseMode aMode)
+/**
+Resolves which letters 'T' or 'P' should prefix number when NOT doing dial resolution.
+Returns number with prefix in aFullNum.
+
+@param aTelNum a reference to the telephone number to be resolved.
+@param aFullNum a reference to the full resolved telephone number, filled here.
+@param aMode a parse mode passed for parsing.
+@exception Leaves if GetBoolL() leaves.
+*/
+	{
+	aTelNum.Zero();			// restart the dial string 
+	TBool mobile;
+	TPtrC loc(LOCATION);
+	iDbAccess->GetBoolL(loc,TPtrC(LOCATION_MOBILE),mobile);
+	if (!mobile && aMode==EForDialing)
+		{
+		TBool pulseDial;
+		iDbAccess->GetBoolL(loc,TPtrC(LOCATION_USE_PULSE_DIAL),pulseDial);
+		if (pulseDial)
+			aTelNum.Append(KCharP);
+		else
+			aTelNum.Append(KCharT);
+		}
+	aTelNum.Append(aFullNum);
+	}
+
+void CCommsDbNetDialAccess::PopulateModemCommSettingsL(TCommConfigV01& aCfg)
+/**
+Read configuration for COMM-port from database and sets it into aCfg 
+
+@param aCfg a reference to COMM-port confiquration, read values are passed back in the parameter.
+@exception Leaves if ReadUintL() leaves.
+*/
+	{
+	TUint32 dummy;
+		CCommsDbAccess::CCommsDbAccessModemTable* modemTable = iDbAccess->ModemTable();
+		CleanupStack::PushL(modemTable);
+		if (modemTable == 0)
+			{
+			User::Leave(KErrNoMemory); // most likely?
+			}
+		CCDModemBearerRecord* table = static_cast<CCDModemBearerRecord*>(modemTable->iRecord);
+		CleanupStack::PopAndDestroy(modemTable);
+
+		dummy = table->iRate;
+		aCfg.iRate=TBps(dummy);	
+		dummy = table->iDataBits;
+		aCfg.iDataBits=TDataBits(dummy);
+		dummy = table->iStopBits;
+		aCfg.iStopBits=TStopBits(dummy);
+		dummy = table->iParity;
+		aCfg.iParity=TParity(dummy);
+		aCfg.iHandshake=TUint(table->iHandshaking);
+		
+		aCfg.iParityError=KConfigParityErrorIgnore;
+		aCfg.iFifo=EFifoEnable;
+		
+		aCfg.iSpecialRate=TInt(table->iSpecialRate);
+		
+		aCfg.iTerminatorCount=2;
+		aCfg.iTerminator[0]=0x0a;
+		aCfg.iTerminator[1]=0x0d;
+		
+		aCfg.iXonChar=TText8(table->iXonChar);
+		aCfg.iXoffChar=TText8(table->iXoffChar);
+		
+		aCfg.iParityErrorChar=0;
+		aCfg.iSIREnable=ESIRDisable;
+		aCfg.iSIRSettings=0;
+		
+		aCfg.iSIRSettings=TUint(table->iSirSettings);				
+	}
+