diff -r 000000000000 -r 8e480a14352b messagingfw/biomsgfw/IACPSRC/SMSP.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/biomsgfw/IACPSRC/SMSP.CPP Mon Jan 18 20:36:02 2010 +0200 @@ -0,0 +1,158 @@ +// Copyright (c) 1998-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: +// SMS settings Parser +// +// + +#include // KMsvRootIndexEntryId +#include +#include +#include +// +#include "BSP.H" +#include "IACP.H" +#include "SMSP.H" +#include "IACPDEF.H" +#include "IACPERR.H" +#include + +#include "IMPMACRO.H" + + +//-------------------------------------- +// +// Constructor +// +CSmsParser::CSmsParser() + { + } + +// +// Factory fns +// +CSmsParser* CSmsParser::NewLC() + { + CSmsParser* self=new (ELeave) CSmsParser(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +CSmsParser* CSmsParser::NewL() + { + CSmsParser* self=CSmsParser::NewLC(); + CleanupStack::Pop(); + return self; + } + +// +// 2nd stage of construction +// +void CSmsParser::ConstructL() + { + // --- Create the blank settings objects --- + iSmsSettings= CSmsSettings::NewL(); + } + +// +// Destruction +// +CSmsParser::~CSmsParser() + { + delete iSmsSettings; + delete iServiceCentreName; + delete iServiceCentreAddress; + } + +// +// Parse/Set data members of CSmsSettings +// +void CSmsParser::ParseL(CParsedFieldCollection& aIacpFields) + { + TPtrC fieldValueBuf; + + // service center name + if (aIacpFields.GetFieldValueAndLength(SMS_SERVICE_CENTER_NAME, fieldValueBuf) != 0) + { + delete iServiceCentreName; + iServiceCentreName = NULL; + iServiceCentreName=fieldValueBuf.AllocL(); + } + + // service name + if (aIacpFields.GetFieldValueAndLength(SMS_SERVICE_CENTER_ADDRESS, fieldValueBuf) != 0) + { + delete iServiceCentreAddress; + iServiceCentreAddress = NULL; + iServiceCentreAddress=fieldValueBuf.AllocL(); + } + + if(iServiceCentreName == 0 || iServiceCentreAddress == 0 || + !((*iServiceCentreName).Length()>0 && (*iServiceCentreAddress).Length() >0)) + User::Leave(KIacpMandatoryDataNotSet); + } +// +// Create sms service +// +void CSmsParser::ProcessL(CMSVENTRY& aEntry) + { + TMsvId entryId = aEntry.Entry().Id(); + CSmsAccount* smsAccount = CSmsAccount::NewLC(); + TRAPD(error, smsAccount->LoadSettingsL(*iSmsSettings)); + if (error == KErrNone) + { + // update or create service centre address + FindServiceCentreAddressL(); + } + else if (error == KErrNotFound) + { + // settings not found, create new + smsAccount->InitialiseDefaultSettingsL(*iSmsSettings); + iSmsSettings->AddServiceCenterL(*iServiceCentreName, *iServiceCentreAddress); + } + else + { + User::Leave(error); + } + smsAccount->SaveSettingsL(*iSmsSettings); + CleanupStack::PopAndDestroy(smsAccount); + // go back to msg's context + SETENTRYL(entryId); + } + + + +void CSmsParser::FindServiceCentreAddressL() + { + TBool foundAddress = EFalse; + TInt numSCentres = iSmsSettings->ServiceCenterCount(); + TInt currentSC = 0; + while(currentSC < numSCentres && !foundAddress) + { + CSmsServiceCenter& number = iSmsSettings->GetServiceCenter(currentSC); + // compare name if there update else look at next SC + if(number.Name().CompareC(*iServiceCentreName)==0) + { + number.SetAddressL(*iServiceCentreAddress); + foundAddress = ETrue; + } + else + currentSC++; + } + if(!foundAddress) + { + iSmsSettings->AddServiceCenterL(*iServiceCentreName,*iServiceCentreAddress); + iSmsSettings->SetDefaultServiceCenter(numSCentres); + } + }