--- /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 <msvids.h> // KMsvRootIndexEntryId
+#include <msvuids.h>
+#include <msventry.h>
+#include <msvruids.h>
+//
+#include "BSP.H"
+#include "IACP.H"
+#include "SMSP.H"
+#include "IACPDEF.H"
+#include "IACPERR.H"
+#include <csmsaccount.h>
+
+#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);
+ }
+ }