--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/IACPSRC/ISSP.CPP Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,173 @@
+// 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:
+// Internet Script Settings Parser
+//
+//
+
+#include <txtetext.h> // CEditableText
+#include <msventry.h>
+
+#include "BSP.H"
+#include "IACP.H"
+#include "ISSP.H"
+#include "IACPDEF.H"
+#include "IACPERR.H"
+
+//
+// Constructor
+//
+CScriptParser::CScriptParser()
+ {
+ }
+
+//
+// Factory fns
+//
+CScriptParser* CScriptParser::NewLC()
+ {
+ CScriptParser* self=new (ELeave) CScriptParser();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+CScriptParser* CScriptParser::NewL()
+ {
+ CScriptParser* self=CScriptParser::NewLC();
+ CleanupStack::Pop();
+ return self;
+ }
+
+//
+// 2nd stage of construction
+//
+void CScriptParser::ConstructL()
+ {
+ iScriptMode=ENewScript;
+ iUseLoginScript=EFalse;
+ iDbSession = CMDBSession::NewL(CMDBSession::LatestVersion());
+ }
+
+//
+// Destruction
+//
+CScriptParser::~CScriptParser()
+ {
+ delete iScriptName;
+ delete iScriptType;
+ delete iLoginScript;
+ delete iDbSession;
+ }
+
+//
+//
+//
+void CScriptParser::ParseL(CParsedFieldCollection& aIacpFields)
+ {
+ TPtrC aFieldValueBuf;
+
+ if (aIacpFields.GetFieldValueAndLength(SMS_SCRIPT_NAME, aFieldValueBuf) != 0)
+ {
+ delete iScriptName;
+ iScriptName = NULL;
+ iScriptName= aFieldValueBuf.AllocL();
+ }
+
+ if (aIacpFields.GetFieldValueAndLength(SMS_SCRIPT_TYPE, aFieldValueBuf) != 0)
+ {
+ delete iScriptType;
+ iScriptType = NULL;
+ iScriptType= aFieldValueBuf.AllocL();
+ }
+
+ //login Script
+ if (aIacpFields.GetFieldValueAndLength(SMS_SCRIPT_DATA, aFieldValueBuf) != 0)
+ iScriptMode= ENewScript;
+ else if (aIacpFields.GetFieldValueAndLength(SMS_SCRIPT_ADD, aFieldValueBuf) != 0)
+ iScriptMode= EAddToScript;
+ else
+ User::Leave(KIacpMandatoryDataNotSet);
+
+ //if function does'nt leave, it means login script has been assigned to 'aFieldValueBuf'
+ delete iLoginScript;
+ iLoginScript = NULL;
+ iLoginScript= aFieldValueBuf.AllocL();
+ iUseLoginScript= ETrue;
+ }
+//
+//
+//
+void CScriptParser::ProcessL(CMsvEntry& aEntry)
+ {
+ if (iScriptMode== EAddToScript)
+ {
+ if(aEntry.Entry().MtmData3() == KBIO_MSG_ENTRY_PROCESSED)
+ User::Leave(KIacpErrScriptAlreadyAdd);//we cannot append script more than once for the same Bio Msg
+ }
+
+ CCDDialOutISPRecord* dialOutISPRecord = static_cast<CCDDialOutISPRecord*>(CCDRecordBase::RecordFactoryL(KCDTIdDialOutISPRecord));
+ CleanupStack::PushL(dialOutISPRecord);
+ dialOutISPRecord->iRecordName.SetMaxLengthL(iScriptName->Length());
+ dialOutISPRecord->iRecordName = iScriptName->Des();
+ if (dialOutISPRecord->FindL(*iDbSession))
+ {
+ if (iScriptMode== EAddToScript)
+ {
+ TPtrC existingScript = TPtrC(dialOutISPRecord->iLoginScript);
+ if (existingScript.Length()==0)
+ {
+ User::Leave(KIacpErrScriptNotFoundInDB);
+ }
+ HBufC* tempBuf= HBufC::NewLC(existingScript.Length() + iLoginScript->Length());
+ tempBuf->Des().Copy(existingScript);
+ tempBuf->Des().Append(iLoginScript->Des());
+ //Realloc into iLoginScript then wrtie it to DB
+ delete iLoginScript;
+ iLoginScript = NULL;
+ iLoginScript= tempBuf->AllocL();
+ iLoginScript->Des().Copy(*tempBuf);
+ CleanupStack::PopAndDestroy(tempBuf);//tempBuf
+ }
+ if(iLoginScript)
+ {
+ ChangeLoginScriptToNewlines();
+ dialOutISPRecord->iUseLoginScript = iUseLoginScript;
+ dialOutISPRecord->iLoginScript.SetMaxLengthL(iLoginScript->Length());
+ dialOutISPRecord->iLoginScript = *iLoginScript;
+ dialOutISPRecord->ModifyL(*iDbSession);
+ }
+ else
+ {
+ User::Leave(KIacpErrScriptNotDefined);
+ }
+ }
+ else
+ {
+ User::Leave(KIacpScriptErrISPNotFound);//there are no records in table
+ }
+ CleanupStack::PopAndDestroy(dialOutISPRecord);
+
+ }
+//
+//
+//
+void CScriptParser::ChangeLoginScriptToNewlines()
+ {
+ TPtr ptr(iLoginScript->Des());
+ for (TInt cc=ptr.Length()-1; cc>=0; --cc)
+ {
+ if (ptr[cc]==CEditableText::EParagraphDelimiter)
+ ptr[cc]=0x0a;
+ }
+ }