telephonyprotocols/csdagt/src/ND_DBACC.CPP
changeset 0 3553901f7fa8
child 19 630d2f34d719
equal deleted inserted replaced
-1:000000000000 0:3553901f7fa8
       
     1 // Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // CCommsDbNetDialAccess definitions
       
    15 // 
       
    16 //
       
    17 
       
    18 /**
       
    19  @file nd_dbacc.cpp 
       
    20 */
       
    21 
       
    22 #include <nifvar.h>
       
    23 	#include <commsdattypesv1_1.h>
       
    24 	#include <commsdatutils.h>
       
    25 	using namespace CommsDat;
       
    26 #include "ND_DBACC.H"
       
    27 #include "SLOGGER.H"
       
    28 #include "ND_STD.H"
       
    29 
       
    30 /**
       
    31 @internalComponent
       
    32 */
       
    33 const TUint32 KZeroFieldValue=0uL;
       
    34 
       
    35 CCommsDbNetDialAccess* CCommsDbNetDialAccess::NewL(CCommsDbAccess* aDbAccess)
       
    36 /**
       
    37 2 phased constructor, first phase.
       
    38 
       
    39 @param aDbAccess a pointer to the database accessor.
       
    40 @exception Leaves if CCommsDbNetDialAccess() constructor leaves, or not enough memory is available.
       
    41 @return a new CCommsDbNetDialAccess object.
       
    42 */
       
    43 	{
       
    44 	return new(ELeave) CCommsDbNetDialAccess(aDbAccess);
       
    45 	}
       
    46 
       
    47 CCommsDbNetDialAccess::CCommsDbNetDialAccess(CCommsDbAccess* aDbAccess)
       
    48 	: iDbAccess(aDbAccess)
       
    49 /**
       
    50 Private constructor used in the first phase of construction.
       
    51 
       
    52 @param aDbAccess a pointer to the database accessor.
       
    53 */
       
    54 	{}
       
    55 
       
    56 CCommsDbNetDialAccess::~CCommsDbNetDialAccess()
       
    57 /**
       
    58 Destructor.
       
    59 */
       
    60 	{}
       
    61 
       
    62 void CCommsDbNetDialAccess::Close()
       
    63 /**
       
    64 Closes database accessor.
       
    65 */
       
    66 	{
       
    67 	iDbAccess->Close();
       
    68 	}
       
    69 
       
    70 void CCommsDbNetDialAccess::GetTsyNameL(TDes& aTsyName)
       
    71 /**
       
    72 Gets TSY name from database.
       
    73 
       
    74 @param aTsyName a reference to the TSY name that is read from database.
       
    75 @exception Leaves if GetTsyNameL() leaves.
       
    76 */
       
    77 	{
       
    78 	iDbAccess->GetTsyNameL(aTsyName);
       
    79 	}	
       
    80 
       
    81 void CCommsDbNetDialAccess::SetCommPortL(const RCall::TCommPort& aCommPort)
       
    82 /**
       
    83 Sets COMM-port into database.
       
    84 
       
    85 @param aCommPort a reference to the COMM-port written into database.
       
    86 @exception Leaves if SetCommPortL() leaves.
       
    87 */
       
    88 	{
       
    89 	iDbAccess->SetCommPortL(aCommPort);
       
    90 	}
       
    91 
       
    92 void CCommsDbNetDialAccess::GetCommPortForDirectConnectL(RCall::TCommPort& aCommPort)
       
    93 /**
       
    94 Get comm port details for direct connection.
       
    95 
       
    96 @param aCommPort a reference to the COMM-port read from database.
       
    97 @exception Leaves if ReadTextL() leaves.
       
    98 */
       
    99 	{
       
   100 		CCommsDbAccess::CCommsDbAccessModemTable* modemTable = iDbAccess->ModemTable();
       
   101 		CleanupStack::PushL(modemTable);
       
   102 		if (modemTable == 0)
       
   103 			{
       
   104 			User::Leave(KErrNoMemory); // most likely?
       
   105 			}
       
   106 		
       
   107 		aCommPort.iCsy = static_cast<CCDModemBearerRecord*>(modemTable->iRecord)->iCsyName;
       
   108 		aCommPort.iPort = static_cast<CCDModemBearerRecord*>(modemTable->iRecord)->iPortName;
       
   109 
       
   110 		CleanupStack::PopAndDestroy(modemTable);
       
   111 	}
       
   112 
       
   113 void CCommsDbNetDialAccess::GetBcaStackL(TDes& aBcaStack)
       
   114 /**
       
   115 Gets the Bca Stack
       
   116 
       
   117 @param aBcaStack the BcaStack
       
   118 @exception Leaves if ReadTextL() leaves.
       
   119 */
       
   120 	{
       
   121 		CCommsDbAccess::CCommsDbAccessModemTable* modemTable = iDbAccess->ModemTable();
       
   122 		CleanupStack::PushL(modemTable);
       
   123 		if (modemTable == 0)
       
   124 			{
       
   125 			User::Leave(KErrNoMemory); // most likely?
       
   126 			}
       
   127 		
       
   128 		aBcaStack = static_cast<CCDModemBearerRecord*>(modemTable->iRecord)->iBcaStack;
       
   129 
       
   130 		CleanupStack::PopAndDestroy(modemTable);
       
   131 	}
       
   132 
       
   133 TInt CCommsDbNetDialAccess::GetIapId()
       
   134 	{
       
   135 	_LIT(KIAPId, "IAP\\Id");
       
   136 
       
   137 	TUint32 iap;
       
   138 	TInt err = iDbAccess->ReadInt(KIAPId(), iap);
       
   139 	return (err == KErrNone) ? iap : err;
       
   140 	}
       
   141 
       
   142 void CCommsDbNetDialAccess::GetCommConfigForDirectConnectL(TCommConfig& aCommConfig)
       
   143 /**
       
   144 Get settings from modem config settings for data bits, stop bits and parity
       
   145 and get appropriate handshaking for direct connection.
       
   146 
       
   147 @param aCommConfig a reference to the configuration read for connection.
       
   148 @exception Leaves if PopulateModemCommSettingsL() leaves.
       
   149 */
       
   150 	{
       
   151 	TCommConfigV01& cfg=aCommConfig();
       
   152 	PopulateModemCommSettingsL(cfg);
       
   153 	// DSRFail not asserted for battery powered modems that switch on with DTR High
       
   154 	cfg.iHandshake&=(~(KDCDHandshakeMask | KDSRFailHandshakeMask | KCTSHandshakeMask));
       
   155 	// Should be 0 for correct script operation
       
   156 	cfg.iTerminatorCount=0;
       
   157 	}
       
   158 
       
   159 void CCommsDbNetDialAccess::GetCommPortRoleL(TCommRole& aRole)
       
   160 /**
       
   161 Get comm port role (DCE or DTE)
       
   162 
       
   163 @param aRole a reference to the role read from the database
       
   164 @exception Leaves if ReadUintL() leaves.
       
   165 */
       
   166 	{
       
   167 	TUint32 dummy = KZeroFieldValue;
       
   168 		CCommsDbAccess::CCommsDbAccessModemTable* modemTable = iDbAccess->ModemTable();
       
   169 		CleanupStack::PushL(modemTable);
       
   170 		if (modemTable == 0)
       
   171 			{
       
   172 			User::Leave(KErrNoMemory); // most likely?
       
   173 			}
       
   174 
       
   175 		dummy = static_cast<CCDModemBearerRecord*>(modemTable->iRecord)->iCommRole;	
       
   176 		if (dummy & KModemCommRoleDCE)
       
   177 			{
       
   178 			aRole = ECommRoleDCE;	
       
   179 			}			
       
   180 		else
       
   181 			{
       
   182 			aRole = ECommRoleDTE;	
       
   183 			}				
       
   184 
       
   185 		CleanupStack::PopAndDestroy(modemTable);
       
   186 	
       
   187 	}
       
   188 
       
   189 void CCommsDbNetDialAccess::GetCallParamsL(RCall::TCallParams& aParams)
       
   190 /**
       
   191 Parse info about speaker settings and pause time from modem prefs and location table
       
   192 into TCallParams struct. Assume we require a location as we are dialling a number.
       
   193 
       
   194 @param aParams a reference to the Core API call parameters read from database.
       
   195 @exception Leaves if ReadUintL(), GetIntL() or GetBoolL() leaves.
       
   196 */
       
   197 	{
       
   198 	TUint32 value=KZeroFieldValue;
       
   199 		CCommsDbAccess::CCommsDbAccessModemTable* modemTable = iDbAccess->ModemTable();
       
   200 		CleanupStack::PushL(modemTable);
       
   201 		if (modemTable == 0)
       
   202 			{
       
   203 			User::Leave(KErrNoMemory); // most likely?
       
   204 			}
       
   205 
       
   206 		value = static_cast<CCDModemBearerRecord*>(modemTable->iRecord)->iSpeakerPref;
       
   207 		
       
   208 	switch (value)
       
   209 		{
       
   210 		case EModemSpeakerSettingNever:
       
   211 			aParams.iSpeakerControl=RCall::EMonitorSpeakerControlAlwaysOff;
       
   212 			break;
       
   213 		case EModemSpeakerSettingUntilCallAnswered:
       
   214 			aParams.iSpeakerControl=RCall::EMonitorSpeakerControlOnUntilCarrier;
       
   215 			break;
       
   216 		case EModemSpeakerSettingAlways:
       
   217 			aParams.iSpeakerControl=RCall::EMonitorSpeakerControlAlwaysOn;
       
   218 			break;
       
   219 		case EModemSpeakerSettingAfterDialUntilAnswer:
       
   220 			aParams.iSpeakerControl=RCall::EMonitorSpeakerControlOnExceptDuringDialling;
       
   221 			break;
       
   222 		default:
       
   223 			aParams.iSpeakerControl=RCall::EMonitorSpeakerControlUnknown;
       
   224 			break;
       
   225 		}
       
   226 	
       
   227 		value = static_cast<CCDModemBearerRecord*>(modemTable->iRecord)->iSpeakerVolPref;
       
   228 
       
   229 		CleanupStack::PopAndDestroy(modemTable);
       
   230 	switch (value)
       
   231 		{
       
   232 		case EModemSpeakerVolumeQuiet:
       
   233 			aParams.iSpeakerVolume=RCall::EMonitorSpeakerVolumeLow;
       
   234 			break;
       
   235 		case EModemSpeakerVolumeMedium:
       
   236 			aParams.iSpeakerVolume=RCall::EMonitorSpeakerVolumeMedium;
       
   237 			break;
       
   238 		case EModemSpeakerVolumeLoud:
       
   239 			aParams.iSpeakerVolume=RCall::EMonitorSpeakerVolumeHigh;
       
   240 			break;
       
   241 		default:
       
   242 			aParams.iSpeakerVolume=RCall::EMonitorSpeakerVolumeUnknown;
       
   243 			break;
       
   244 		}
       
   245 	
       
   246 	TPtrC loc(LOCATION);
       
   247 	iDbAccess->GetIntL(loc,TPtrC(LOCATION_PAUSE_AFTER_DIAL_OUT),value);
       
   248 	aParams.iInterval=(TUint)value;
       
   249 
       
   250 	TBool bValue;
       
   251 	iDbAccess->GetBoolL(loc,TPtrC(LOCATION_WAIT_FOR_DIAL_TONE),bValue);
       
   252 	if (bValue)
       
   253 		{
       
   254 		aParams.iWaitForDialTone=RCall::EDialToneWait;
       
   255 		}
       
   256 	else
       
   257 		{
       
   258 		aParams.iWaitForDialTone=RCall::EDialToneNoWait;
       
   259 		}
       
   260 	}
       
   261 
       
   262 TInt CCommsDbNetDialAccess::GetRedialAttempts(TUint32& aAttempts)
       
   263 /**
       
   264 Reads amount of redial attempts from database.
       
   265 
       
   266 @param aAttempts a reference to redial attempts read from database.
       
   267 @return an error code trapped if GetGlobalL() leaves.
       
   268 */
       
   269 	{
       
   270 	TRAPD(ret,iDbAccess->GetGlobalL(TPtrC(REDIAL_ATTEMPTS),aAttempts));
       
   271 	return ret;
       
   272 	}
       
   273 
       
   274 void CCommsDbNetDialAccess::GetRemoteParty(TDes& aRemoteParty)
       
   275 /**
       
   276 Read ISP name from database and return as remote party.
       
   277 
       
   278 @param aRemoteParty a reference to ISP name read from database.
       
   279 @exception Leaves if GetDesL() leaves.
       
   280 */
       
   281 	{
       
   282 	TInt ret(KErrNone);
       
   283 	TPtrC name(COMMDB_NAME);
       
   284 
       
   285 	ret = AssertDialOutTable();
       
   286 	if (ret != KErrNone)
       
   287 		{
       
   288 		//if AssertDialOutTable encounters serios errors (OOM)
       
   289 		//it must set aRemoteParty appropriatelly
       
   290 		_LIT(unknownParty,"???");
       
   291 		aRemoteParty=unknownParty;
       
   292 		return;
       
   293 		}
       
   294 
       
   295 	TRAP(ret,iDbAccess->GetDesL(TPtrC(IAP),name,aRemoteParty));
       
   296 
       
   297 	if(ret!=KErrNone)
       
   298 		{
       
   299 		_LIT(unknownParty,"???");
       
   300 		aRemoteParty=unknownParty;
       
   301 		}
       
   302 	}
       
   303 
       
   304 void CCommsDbNetDialAccess::IsDefaultTelNumL(TBool& aIsTelNum)
       
   305 /**
       
   306 Check length of default tel no - if 0 set boolean to false, else true.
       
   307 Only for dial out
       
   308 
       
   309 @param aIsTelNum a reference to the default tel num read from database.
       
   310 @exception Leaves if GetDesL() leaves.
       
   311 
       
   312 */
       
   313 	{
       
   314 	User::LeaveIfError(AssertDialOutTable());
       
   315 
       
   316 	TDialString telNum;
       
   317 	iDbAccess->GetDesL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_DEFAULT_TEL_NUM),telNum);
       
   318 	if (telNum.Length()==0) 
       
   319 		aIsTelNum=EFalse;
       
   320 	else
       
   321 		aIsTelNum=ETrue;
       
   322 	}
       
   323 
       
   324 void CCommsDbNetDialAccess::GetUsePctL(TBool& aUsePct)
       
   325 /**
       
   326 Read the DisplayPct boolean from the ISP database
       
   327 Only for dial out
       
   328 
       
   329 @param aUsePct a reference to the DisplayPct boolean read from database.
       
   330 @exception Leaves if GetBoolL() leaves.
       
   331 */
       
   332 	{
       
   333 	User::LeaveIfError(AssertDialOutTable());
       
   334 	iDbAccess->GetBoolL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_DISPLAY_PCT),aUsePct);
       
   335 	}
       
   336 
       
   337 void CCommsDbNetDialAccess::GetScriptDetailsL(TBool& aUseScript, TInt& aLength)
       
   338 /**
       
   339 Get the length of the script into aLength.
       
   340 Dial in or dial out.
       
   341 
       
   342 @param aUseScript a reference to the script boolean read from database.
       
   343 @param aLength a reference to the lenght of script read from database.
       
   344 @exception Leaves if GetBoolL() or GetLengthOfLongDesL() leaves.
       
   345 */
       
   346 	{
       
   347 	User::LeaveIfError(AssertDialOutTable());
       
   348 	iDbAccess->GetBoolL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_USE_LOGIN_SCRIPT),aUseScript);
       
   349 	aLength=iDbAccess->GetLengthOfLongDesL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_LOGIN_SCRIPT));
       
   350 	}	
       
   351 
       
   352 HBufC* CCommsDbNetDialAccess::GetScriptLC()
       
   353 /**
       
   354 Return the script.
       
   355 Dial in or dial out.
       
   356 
       
   357 @exception Leaves if GetBoolL() or GetLengthOfLongDesL() leaves.
       
   358 @return as HBufC* the login script read from database.
       
   359 */
       
   360 	{
       
   361 	User::LeaveIfError(AssertDialOutTable());
       
   362 	return iDbAccess->GetLongDesLC(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_LOGIN_SCRIPT));
       
   363 	}
       
   364 
       
   365 void CCommsDbNetDialAccess::GetLoginParamsL(TBool& aPromptForLogin,TDes& aLoginName,TDes& aLoginPass,TDes& aIPAddress)
       
   366 /**
       
   367 Get boolean PromptForLogin and login name, login password and IP address
       
   368 Dial out only.
       
   369 
       
   370 @param aPromptForLogin a reference to the prompt boolean read from database.
       
   371 @param aLoginName a reference to the login name read from database.
       
   372 @param aLoginPass a reference to the login password read from database.
       
   373 @param aIPAddress a reference to the ISP IP address read from database.
       
   374 @exception Leaves if GetBoolL() or GetDesL() leaves.
       
   375 */
       
   376 	{
       
   377 	User::LeaveIfError(AssertDialOutTable());
       
   378 
       
   379 	iDbAccess->GetBoolL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_PROMPT_FOR_LOGIN),aPromptForLogin);
       
   380 	iDbAccess->GetDesL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_LOGIN_NAME),aLoginName);
       
   381 	iDbAccess->GetDesL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_LOGIN_PASS),aLoginPass);
       
   382 	iDbAccess->GetDesL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_IP_ADDR),aIPAddress);
       
   383 	}
       
   384 
       
   385 TInt CCommsDbNetDialAccess::GetCallbackTimeout(TUint32& aTimeout)
       
   386 /**
       
   387 Get call back timeout.
       
   388 
       
   389 @param aTimeout a reference to the dial out time read from database.
       
   390 @return an error code trapped if GetIntL() leaves.
       
   391 */
       
   392 	{
       
   393 	TInt ret = AssertDialOutTable();
       
   394 	if (ret != KErrNone)
       
   395 		return ret;
       
   396 
       
   397 	TRAP(ret,iDbAccess->GetIntL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_CALLBACK_TIMEOUT),aTimeout));
       
   398 	return ret;
       
   399 	}
       
   400 
       
   401 TBool CCommsDbNetDialAccess::HscsdSettingsAvailableL()
       
   402 /**
       
   403 Check if HSCSD settings are available in database.
       
   404 
       
   405 @return ETrue if bearer type in database is EBearerTypeHSCSD. Else return EFalse.
       
   406 */
       
   407 	{
       
   408 	User::LeaveIfError(AssertDialOutTable());
       
   409 
       
   410 	TUint32 temp=0uL;
       
   411 	TRAPD(ret,iDbAccess->GetIntL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_BEARER_TYPE),temp));
       
   412 	if (ret==KErrUnknown)
       
   413 		return EFalse;
       
   414 	User::LeaveIfError(ret);	// any other error
       
   415 	if ((TCommsDbBearerType)temp==EBearerTypeHSCSD)
       
   416 		return ETrue;
       
   417 	return EFalse;
       
   418 	}
       
   419 
       
   420 void CCommsDbNetDialAccess::GetMmHscsdParametersL(RMobileCall::TMobileHscsdCallParamsV1& aMmHscsdParams)
       
   421 /**
       
   422 Get Multimode HSCSD call parameters..
       
   423 
       
   424 @param aMmHscsdParams a reference to the multimode HSCSD call parameters read from database.
       
   425 @exception Leaves if GetIntL or GetBoolL() leaves.
       
   426 */
       
   427 	{
       
   428 	User::LeaveIfError(AssertDialOutTable());
       
   429 
       
   430 	TUint32 temp=0uL;
       
   431 	TPtrC serviceTableName(DIAL_OUT_ISP);
       
   432 	iDbAccess->GetIntL(serviceTableName,TPtrC(ISP_AIUR),temp);
       
   433 	aMmHscsdParams.iWantedAiur=(RMobileCall::TMobileCallAiur)temp;
       
   434 	iDbAccess->GetIntL(serviceTableName,TPtrC(ISP_REQUESTED_TIME_SLOTS),temp);
       
   435 	aMmHscsdParams.iWantedRxTimeSlots=(TInt)temp;
       
   436 	iDbAccess->GetIntL(serviceTableName,TPtrC(ISP_MAXIMUM_TIME_SLOTS),temp);
       
   437 	aMmHscsdParams.iMaxTimeSlots=(TInt)temp;
       
   438 	iDbAccess->GetIntL(serviceTableName,TPtrC(ISP_CHANNEL_CODING),temp);
       
   439 	aMmHscsdParams.iCodings=(TUint32)temp;
       
   440 	iDbAccess->GetIntL(serviceTableName,TPtrC(ISP_ASYMMETRY),temp);
       
   441 	aMmHscsdParams.iAsymmetry=(RMobileCall::TMobileCallAsymmetry)temp;
       
   442 	TBool b;
       
   443 	iDbAccess->GetBoolL(serviceTableName,TPtrC(ISP_USER_INIT_UPGRADE),b);
       
   444 	aMmHscsdParams.iUserInitUpgrade=b;
       
   445 	}
       
   446 
       
   447 TBool CCommsDbNetDialAccess::GetMmCallParams(RMobileCall::TMobileDataCallParamsV1& aMmParams)
       
   448 /**
       
   449 Get Multimode data call parameters. If the parameters can be read from database,
       
   450 return ETrue, else return EFalse.
       
   451 
       
   452 @param aMmParams a reference to the multimode data call parameters read from database.
       
   453 @return ETrue if multimode data call parameters are read successfully. Else return EFalse.
       
   454 */
       
   455 	{
       
   456 	TInt ret = AssertDialOutTable();
       
   457 	if (ret!=KErrNone)
       
   458 		return EFalse;
       
   459 
       
   460 	TUint32 temp=0uL;
       
   461 	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_BEARER_SERVICE),temp));
       
   462 	if (ret!=KErrNone)
       
   463 		return EFalse;
       
   464 	aMmParams.iService=(RMobileCall::TMobileCallDataService)temp;
       
   465 	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_BEARER_SPEED),temp));
       
   466 	if (ret!=KErrNone)
       
   467 		return EFalse;
       
   468 	aMmParams.iSpeed=(RMobileCall::TMobileCallDataSpeed)temp;
       
   469 	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_BEARER_PROTOCOL),temp));
       
   470 	if (ret!=KErrNone)
       
   471 		return EFalse;
       
   472 	aMmParams.iProtocol=(RMobileCall::TMobileCallDataProtocol)temp;
       
   473 	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_BEARER_CE),temp));
       
   474 	if (ret!=KErrNone)
       
   475 		return EFalse;
       
   476 	aMmParams.iQoS=(RMobileCall::TMobileCallDataQoS)temp;
       
   477 	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_RLP_VERSION),temp));
       
   478 	if (ret!=KErrNone)
       
   479 		return EFalse;
       
   480 	aMmParams.iRLPVersion=(RMobileCall::TMobileCallDataRLPVersion)temp;
       
   481 	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_IWF_TO_MS),temp));
       
   482 	if (ret!=KErrNone)
       
   483 		return EFalse;
       
   484 	aMmParams.iModemToMSWindowSize=(TInt)temp;
       
   485 	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_MS_TO_IWF),temp));
       
   486 	if (ret!=KErrNone)
       
   487 		return EFalse;
       
   488 	aMmParams.iMSToModemWindowSize=(TInt)temp;
       
   489 	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_ACK_TIMER),temp));
       
   490 	if (ret!=KErrNone)
       
   491 		return EFalse;
       
   492 	aMmParams.iAckTimer=(TInt)temp;
       
   493 	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_RETRANSMISSION_ATTEMPTS),temp));
       
   494 	if (ret!=KErrNone)
       
   495 		return EFalse;
       
   496 	aMmParams.iRetransmissionAttempts=(TInt)temp;
       
   497 	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_RESEQUENCE_PERIOD),temp));
       
   498 	if (ret!=KErrNone)
       
   499 		return EFalse;
       
   500 	aMmParams.iResequencingPeriod=(TInt)temp;
       
   501 	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_V42_COMPRESSION),temp));
       
   502 	if (ret!=KErrNone)
       
   503 		return EFalse;
       
   504 	aMmParams.iV42bisReq=(RMobileCall::TMobileCallDataV42bis)temp;
       
   505 	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_V42_CODEWORDS),temp));
       
   506 	if (ret!=KErrNone)
       
   507 		return EFalse;
       
   508 	aMmParams.iV42bisCodewordsNum=(TInt)temp;
       
   509 	TRAP(ret,iDbAccess->GetIntL(KGeneralServiceTable,TPtrC(ISP_V42_MAX_LENGTH),temp));
       
   510 	if (ret!=KErrNone)
       
   511 		return EFalse;
       
   512 	aMmParams.iV42bisMaxStringLength=(TInt)temp;
       
   513 	TBool useEdge;
       
   514 	TRAP(ret,iDbAccess->GetBoolL(KGeneralServiceTable,TPtrC(ISP_USE_EDGE),useEdge));
       
   515 	if (ret!=KErrNone)
       
   516 		return EFalse;
       
   517 	aMmParams.iUseEdge=useEdge;
       
   518 	return ETrue;
       
   519 	}
       
   520 
       
   521 void CCommsDbNetDialAccess::CopyIspInitStringToModemL()
       
   522 /**
       
   523 Copy over ISP init string from ISP to modem table.
       
   524 
       
   525 @exception Leaves if GetDesL(), UpdateRecord() or PutRecordChanges() leaves.
       
   526 */
       
   527 	{
       
   528 	TBuf8<KCommsDbSvrMaxFieldLength> initStringIsp;
       
   529 	iDbAccess->GetDesL (KGeneralServiceTable, TPtrC (ISP_INIT_STRING), initStringIsp);
       
   530 	TBuf8<KCommsDbSvrMaxFieldLength> initStringModem;	
       
   531 
       
   532 	CCommsDbAccess::CCommsDbAccessModemTable* modemTable = iDbAccess->ModemTable();
       
   533 	CleanupStack::PushL(modemTable);
       
   534 	if (modemTable == 0)
       
   535 		{
       
   536 		User::Leave(KErrNoMemory); // most likely?
       
   537 		}
       
   538 
       
   539 	initStringModem = static_cast<CCDModemBearerRecord*>(modemTable->iRecord)->iModemInitString;
       
   540 
       
   541 	if (initStringIsp.CompareF (initStringModem) != 0)
       
   542 		{
       
   543 		modemTable->iRecord->RefreshL(*(modemTable->iSession));
       
   544 		static_cast<CCDModemBearerRecord*>(modemTable->iRecord)->iModemInitString = initStringIsp;
       
   545 		modemTable->iRecord->ModifyL(*(modemTable->iSession));
       
   546 		} 
       
   547 
       
   548 	CleanupStack::PopAndDestroy(modemTable);
       
   549 	}
       
   550 
       
   551 void CCommsDbNetDialAccess::DoDiallingResolutionL(TDialString& aTelNum, TParseMode aMode)
       
   552 /**
       
   553 Decide which phone number to use by checking alternative locations and do correct dialling 
       
   554 resolution. Write correct dial string back to aTelNum.
       
   555 Only for dial out.
       
   556 
       
   557 @param aTelNum a reference to the telephone number resolved in database.
       
   558 @param aMode a parse mode passed for parsing.
       
   559 @exception Leaves if GetDesL(), GetBoolL(), SetUnresolvedDialStringL(), GetIntL() or ResolvePhoneNumberL() leaves.
       
   560 */
       
   561 	{
       
   562 	User::LeaveIfError(AssertDialOutTable());
       
   563 	TDialString fullNum;
       
   564 	iDbAccess->GetDesL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_DEFAULT_TEL_NUM),fullNum);
       
   565 	TBool doDiallingResolution;
       
   566 	iDbAccess->GetBoolL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_DIAL_RESOLUTION),doDiallingResolution);
       
   567 
       
   568 	if(!doDiallingResolution || fullNum.Length()==0)
       
   569 		{
       
   570 		SetUnresolvedDialStringL(aTelNum,fullNum,aMode);
       
   571 		}
       
   572 	else
       
   573 		{
       
   574 		TUint32 chargecardId=KZeroFieldValue;
       
   575 		TInt ret=KErrNone;
       
   576 
       
   577 		TRAP(ret,iDbAccess->GetIntL(TPtrC(DIAL_OUT_ISP),TPtrC(ISP_CHARGECARD),chargecardId));
       
   578 
       
   579 		if (ret==KErrUnknown)		// don't care if there isn't one
       
   580 			{
       
   581 			ret=KErrNone;
       
   582 			}
       
   583 		
       
   584 		User::LeaveIfError(ret);
       
   585 		CommsDatUtils::CCommsDatUtils::ResolvePhoneNumberL(fullNum,aTelNum,aMode,iDbAccess->LocationId(),chargecardId);
       
   586 		}
       
   587 	}
       
   588 
       
   589 // Private functions 
       
   590 
       
   591 TInt CCommsDbNetDialAccess::AssertDialOutTable() const
       
   592 /**
       
   593 Reads service type from database.
       
   594 
       
   595 @exception Panics if GetServiceTypeL() leaves or service type read from database is not DIAL_OUT_ISP.
       
   596 */
       
   597 	{
       
   598 	TBuf<KCommsDbSvrMaxFieldLength> serviceType;
       
   599 	TRAPD(ret, iDbAccess->GetServiceTypeL(serviceType));
       
   600 	if (ret == KErrNone && serviceType!=TPtrC(DIAL_OUT_ISP))
       
   601 		{
       
   602 		NetDialPanic(EIllegalDbRequestForService);
       
   603 		}
       
   604 
       
   605 	return ret;
       
   606 	}
       
   607 
       
   608 void CCommsDbNetDialAccess::SetUnresolvedDialStringL(TDialString& aTelNum,const TDialString& aFullNum, TParseMode aMode)
       
   609 /**
       
   610 Resolves which letters 'T' or 'P' should prefix number when NOT doing dial resolution.
       
   611 Returns number with prefix in aFullNum.
       
   612 
       
   613 @param aTelNum a reference to the telephone number to be resolved.
       
   614 @param aFullNum a reference to the full resolved telephone number, filled here.
       
   615 @param aMode a parse mode passed for parsing.
       
   616 @exception Leaves if GetBoolL() leaves.
       
   617 */
       
   618 	{
       
   619 	aTelNum.Zero();			// restart the dial string 
       
   620 	TBool mobile;
       
   621 	TPtrC loc(LOCATION);
       
   622 	iDbAccess->GetBoolL(loc,TPtrC(LOCATION_MOBILE),mobile);
       
   623 	if (!mobile && aMode==EForDialing)
       
   624 		{
       
   625 		TBool pulseDial;
       
   626 		iDbAccess->GetBoolL(loc,TPtrC(LOCATION_USE_PULSE_DIAL),pulseDial);
       
   627 		if (pulseDial)
       
   628 			aTelNum.Append(KCharP);
       
   629 		else
       
   630 			aTelNum.Append(KCharT);
       
   631 		}
       
   632 	aTelNum.Append(aFullNum);
       
   633 	}
       
   634 
       
   635 void CCommsDbNetDialAccess::PopulateModemCommSettingsL(TCommConfigV01& aCfg)
       
   636 /**
       
   637 Read configuration for COMM-port from database and sets it into aCfg 
       
   638 
       
   639 @param aCfg a reference to COMM-port confiquration, read values are passed back in the parameter.
       
   640 @exception Leaves if ReadUintL() leaves.
       
   641 */
       
   642 	{
       
   643 	TUint32 dummy;
       
   644 		CCommsDbAccess::CCommsDbAccessModemTable* modemTable = iDbAccess->ModemTable();
       
   645 		CleanupStack::PushL(modemTable);
       
   646 		if (modemTable == 0)
       
   647 			{
       
   648 			User::Leave(KErrNoMemory); // most likely?
       
   649 			}
       
   650 		CCDModemBearerRecord* table = static_cast<CCDModemBearerRecord*>(modemTable->iRecord);
       
   651 		CleanupStack::PopAndDestroy(modemTable);
       
   652 
       
   653 		dummy = table->iRate;
       
   654 		aCfg.iRate=TBps(dummy);	
       
   655 		dummy = table->iDataBits;
       
   656 		aCfg.iDataBits=TDataBits(dummy);
       
   657 		dummy = table->iStopBits;
       
   658 		aCfg.iStopBits=TStopBits(dummy);
       
   659 		dummy = table->iParity;
       
   660 		aCfg.iParity=TParity(dummy);
       
   661 		aCfg.iHandshake=TUint(table->iHandshaking);
       
   662 		
       
   663 		aCfg.iParityError=KConfigParityErrorIgnore;
       
   664 		aCfg.iFifo=EFifoEnable;
       
   665 		
       
   666 		aCfg.iSpecialRate=TInt(table->iSpecialRate);
       
   667 		
       
   668 		aCfg.iTerminatorCount=2;
       
   669 		aCfg.iTerminator[0]=0x0a;
       
   670 		aCfg.iTerminator[1]=0x0d;
       
   671 		
       
   672 		aCfg.iXonChar=TText8(table->iXonChar);
       
   673 		aCfg.iXoffChar=TText8(table->iXoffChar);
       
   674 		
       
   675 		aCfg.iParityErrorChar=0;
       
   676 		aCfg.iSIREnable=ESIRDisable;
       
   677 		aCfg.iSIRSettings=0;
       
   678 		
       
   679 		aCfg.iSIRSettings=TUint(table->iSirSettings);				
       
   680 	}
       
   681