diff -r 6b1d113cdff3 -r 6638e7f4bd8f telephonyprotocols/csdagt/script/SSCRREAD.CPP --- a/telephonyprotocols/csdagt/script/SSCRREAD.CPP Mon May 03 13:37:20 2010 +0300 +++ b/telephonyprotocols/csdagt/script/SSCRREAD.CPP Thu May 06 15:10:38 2010 +0100 @@ -1,268 +1,268 @@ -// Copyright (c) 2003-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: -// NetDial Script reader -// -// - -/** - @file Scrread.cpp -*/ - -#include "SSCRREAD.H" -#include "ND_STD.H" -#include "SLOGGER.H" - -// TLinePosition definitions - -TLinePosition::TLinePosition(TInt aLineCount,TInt aLineStart,TInt aLineLength,TInt aOffset) - : iLineCount(aLineCount), iLineStart(aLineStart), iLineLength(aLineLength), iOffset(aOffset) -/** -Constructor for TLinePosition. - -@param aLineCount is line count. -@param aLineStart is line start. -@param aLineLength is line length. -@param aOffset is line offset. -*/ - {} - -TLinePosition& TLinePosition::operator=(const TLinePosition& aLinePosition) -/** -TLinePosition =-operator. - -@param aLinePosition a reference to line position for comparison. -*/ - { - iLineCount=aLinePosition.iLineCount; - iLineStart=aLinePosition.iLineStart; - iLineLength=aLinePosition.iLineLength; - iOffset=aLinePosition.iOffset; - return (*this); - } - -void TLinePosition::Reset() -/** -Reset. -*/ - { - iLineCount=0; - iLineStart=0; - iLineLength=0; - iOffset=0; - } - -// TScriptStatus definitions - -TScriptStatus::TScriptStatus(TInt& aOffset,TPtrC& aLine,TBool& aSkip,TBool& aSkipModeToggleReq) - : iOffset(aOffset), iLine(aLine), iSkip(aSkip), iSkipModeToggleReq(aSkipModeToggleReq) -/** -Constructor for TScriptStatus. - -@param aOffset a reference to script offset. -@param aLine a reference to script line. -@param aSkip a reference to skip -@param aSkipModeToggleReq a reference to skip mode toggle. -*/ - {} - -TScriptStatus::TScriptStatus(const TScriptStatus& aStatus) - : iOffset(aStatus.iOffset), iLine(aStatus.iLine), iSkip(aStatus.iSkip), iSkipModeToggleReq(aStatus.iSkipModeToggleReq) -/** -Constructor for TScriptStatus. - -@param aStatus a reference to script status. -*/ - {} - -// CScriptReader (NetDial Script Reader) definitions - -CScriptReader* CScriptReader::NewL(TInt aBufferSize) -/** -2 phased constructor for CScriptReader, first phase. - -@param aBufferSize is buffer size for script reader. -@exception Leaves if ConstructL() leaves, or not enough memory is available. -@return a new CScriptReader object. -*/ - { - CScriptReader* p=new(ELeave) CScriptReader(); - CleanupStack::PushL(p); - p->ConstructL(aBufferSize); - CleanupStack::Pop(); - return p; - } - -CScriptReader::CScriptReader() - : iScript(NULL,0), iCurrentPosition() -/** -Constructor for CScriptReader, used in the first phase of construction. -*/ - {} - -void CScriptReader::ConstructL(TInt aBufferSize) -/** -Instantiate member variables. - -@param aBufferSize is buffer size for script reader. -*/ - { - __FLOG_STMT(_LIT8(logString,"Script:\tCreating Buffer Of Size %d");) - __FLOG_STATIC1(KNetDialLogFolder(),KNetDialLogFile(),TRefByValue(logString()),aBufferSize); - iScriptBuffer=HBufC::NewL(aBufferSize); - TPtr temp=iScriptBuffer->Des(); - iScript.Set(temp); - iLoggingOn=ETrue; - } - -CScriptReader::~CScriptReader() -/** -Destructor. -Delete members. -*/ - { - delete iScriptBuffer; - } - -void CScriptReader::SetScript(const TDesC& aScript) -/** -Set script and reset buffers. -@param aScript a reference to used script. -*/ - { - iScript.Copy(aScript); - iCurrentPosition.Reset(); - iScriptSet=ETrue; - iSkip=EFalse; - } - -TBool CScriptReader::IsScriptSet() const -/** -Set script and reset buffers. - -@return iScriptSet flag. -*/ - { - return iScriptSet; - } - -TScriptStatus CScriptReader::ScriptStatus() -/** -Set script and reset buffers. - -@return TScriptStatus. -*/ - { - return TScriptStatus(iCurrentPosition.iOffset,iCurrentLine,iSkip,iSkipModeToggleReq); - } - -TInt CScriptReader::GetNextLine() -/** -Get next line. - -@return current line from GetCurrentLine(). -*/ - { - iCurrentPosition.iLineStart+=iCurrentPosition.iLineLength; // adjust to the start of the next line - return GetCurrentLine(); - } - -TInt CScriptReader::GetCurrentLine() -/** -Get current line. - -@return current line. -*/ - { - TInt activeLen=iScript.Length()-iCurrentPosition.iLineStart; // length of the script which is still unread - if (activeLen==0) - return KErrScriptCompleted; - - TPtrC activeDes; - activeDes.Set(iScript.Right(activeLen)); - - TBool isLastLineWithoutReturn=EFalse; - TInt posCR=activeDes.Locate(KCarriageReturn); - TInt posLF=activeDes.Locate(KLineFeed); - if(posCR==KErrNotFound && posLF==KErrNotFound) - isLastLineWithoutReturn=ETrue; - - if (isLastLineWithoutReturn) - iCurrentPosition.iLineLength=activeDes.Length(); - else - { - if (posCR==KErrNotFound) - posCR = KMaxTInt; - if (posLF==KErrNotFound) - posLF = KMaxTInt; - TInt pos = Min(posCR,posLF); - iCurrentPosition.iLineLength=pos+1; - } - - iCurrentLine.Set(activeDes.Left(iCurrentPosition.iLineLength)); // for script status - iCurrentPosition.iOffset=0; - iCurrentPosition.iLineCount++; - if (iLoggingOn) - { - TBuf line; - line.Copy(activeDes.Left(Min(KLogBufferSize,iCurrentPosition.iLineLength))); - if (iSkip) - { - __FLOG_STMT(_LIT(logString1,"Script Line #%d:\t[Skip] : %S");) - __FLOG_STATIC2(KNetDialLogFolder(),KNetDialLogFile(),TRefByValue(logString1()),iCurrentPosition.iLineCount,&line); - } - else - { - __FLOG_STMT(_LIT(logString2,"Script Line #%d:\t%S");) - __FLOG_STATIC2(KNetDialLogFolder(),KNetDialLogFile(),TRefByValue(logString2()),iCurrentPosition.iLineCount,&line); - } - } - return KErrNone; - } - -void CScriptReader::CurrentPos(TLinePosition& aPosition,TInt aOffset) -/** -Get the current position and change the offset to aOffset. - -@param aPosition a reference to line position. -@param aOffset is offset. -*/ - { - aPosition=iCurrentPosition; - aPosition.iOffset=aOffset; - } - -void CScriptReader::SetCurrentPos(TLinePosition aPosition) -/** -Set current position to aPos and aLine - -@param aPosition is line position. -*/ - { - iCurrentPosition=aPosition; - } - -TInt CScriptReader::Reset() -/** -Reset counters and flags -*/ - { - iLoggingOn=ETrue; - iCurrentPosition.Reset(); - TInt ret=GetCurrentLine(); - __ASSERT_DEBUG(!iScriptSet || ret==KErrNone, User::Invariant()); - GetCurrentLine(); - iSkip=EFalse; - iSkipModeToggleReq=EFalse; - return ret; - } +// Copyright (c) 2003-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: +// NetDial Script reader +// +// + +/** + @file Scrread.cpp +*/ + +#include "SSCRREAD.H" +#include "ND_STD.H" +#include "SLOGGER.H" + +// TLinePosition definitions + +TLinePosition::TLinePosition(TInt aLineCount,TInt aLineStart,TInt aLineLength,TInt aOffset) + : iLineCount(aLineCount), iLineStart(aLineStart), iLineLength(aLineLength), iOffset(aOffset) +/** +Constructor for TLinePosition. + +@param aLineCount is line count. +@param aLineStart is line start. +@param aLineLength is line length. +@param aOffset is line offset. +*/ + {} + +TLinePosition& TLinePosition::operator=(const TLinePosition& aLinePosition) +/** +TLinePosition =-operator. + +@param aLinePosition a reference to line position for comparison. +*/ + { + iLineCount=aLinePosition.iLineCount; + iLineStart=aLinePosition.iLineStart; + iLineLength=aLinePosition.iLineLength; + iOffset=aLinePosition.iOffset; + return (*this); + } + +void TLinePosition::Reset() +/** +Reset. +*/ + { + iLineCount=0; + iLineStart=0; + iLineLength=0; + iOffset=0; + } + +// TScriptStatus definitions + +TScriptStatus::TScriptStatus(TInt& aOffset,TPtrC& aLine,TBool& aSkip,TBool& aSkipModeToggleReq) + : iOffset(aOffset), iLine(aLine), iSkip(aSkip), iSkipModeToggleReq(aSkipModeToggleReq) +/** +Constructor for TScriptStatus. + +@param aOffset a reference to script offset. +@param aLine a reference to script line. +@param aSkip a reference to skip +@param aSkipModeToggleReq a reference to skip mode toggle. +*/ + {} + +TScriptStatus::TScriptStatus(const TScriptStatus& aStatus) + : iOffset(aStatus.iOffset), iLine(aStatus.iLine), iSkip(aStatus.iSkip), iSkipModeToggleReq(aStatus.iSkipModeToggleReq) +/** +Constructor for TScriptStatus. + +@param aStatus a reference to script status. +*/ + {} + +// CScriptReader (NetDial Script Reader) definitions + +CScriptReader* CScriptReader::NewL(TInt aBufferSize) +/** +2 phased constructor for CScriptReader, first phase. + +@param aBufferSize is buffer size for script reader. +@exception Leaves if ConstructL() leaves, or not enough memory is available. +@return a new CScriptReader object. +*/ + { + CScriptReader* p=new(ELeave) CScriptReader(); + CleanupStack::PushL(p); + p->ConstructL(aBufferSize); + CleanupStack::Pop(); + return p; + } + +CScriptReader::CScriptReader() + : iScript(NULL,0), iCurrentPosition() +/** +Constructor for CScriptReader, used in the first phase of construction. +*/ + {} + +void CScriptReader::ConstructL(TInt aBufferSize) +/** +Instantiate member variables. + +@param aBufferSize is buffer size for script reader. +*/ + { + __FLOG_STMT(_LIT8(logString,"Script:\tCreating Buffer Of Size %d");) + __FLOG_STATIC1(KNetDialLogFolder(),KNetDialLogFile(),TRefByValue(logString()),aBufferSize); + iScriptBuffer=HBufC::NewL(aBufferSize); + TPtr temp=iScriptBuffer->Des(); + iScript.Set(temp); + iLoggingOn=ETrue; + } + +CScriptReader::~CScriptReader() +/** +Destructor. +Delete members. +*/ + { + delete iScriptBuffer; + } + +void CScriptReader::SetScript(const TDesC& aScript) +/** +Set script and reset buffers. +@param aScript a reference to used script. +*/ + { + iScript.Copy(aScript); + iCurrentPosition.Reset(); + iScriptSet=ETrue; + iSkip=EFalse; + } + +TBool CScriptReader::IsScriptSet() const +/** +Set script and reset buffers. + +@return iScriptSet flag. +*/ + { + return iScriptSet; + } + +TScriptStatus CScriptReader::ScriptStatus() +/** +Set script and reset buffers. + +@return TScriptStatus. +*/ + { + return TScriptStatus(iCurrentPosition.iOffset,iCurrentLine,iSkip,iSkipModeToggleReq); + } + +TInt CScriptReader::GetNextLine() +/** +Get next line. + +@return current line from GetCurrentLine(). +*/ + { + iCurrentPosition.iLineStart+=iCurrentPosition.iLineLength; // adjust to the start of the next line + return GetCurrentLine(); + } + +TInt CScriptReader::GetCurrentLine() +/** +Get current line. + +@return current line. +*/ + { + TInt activeLen=iScript.Length()-iCurrentPosition.iLineStart; // length of the script which is still unread + if (activeLen==0) + return KErrScriptCompleted; + + TPtrC activeDes; + activeDes.Set(iScript.Right(activeLen)); + + TBool isLastLineWithoutReturn=EFalse; + TInt posCR=activeDes.Locate(KCarriageReturn); + TInt posLF=activeDes.Locate(KLineFeed); + if(posCR==KErrNotFound && posLF==KErrNotFound) + isLastLineWithoutReturn=ETrue; + + if (isLastLineWithoutReturn) + iCurrentPosition.iLineLength=activeDes.Length(); + else + { + if (posCR==KErrNotFound) + posCR = KMaxTInt; + if (posLF==KErrNotFound) + posLF = KMaxTInt; + TInt pos = Min(posCR,posLF); + iCurrentPosition.iLineLength=pos+1; + } + + iCurrentLine.Set(activeDes.Left(iCurrentPosition.iLineLength)); // for script status + iCurrentPosition.iOffset=0; + iCurrentPosition.iLineCount++; + if (iLoggingOn) + { + TBuf line; + line.Copy(activeDes.Left(Min(KLogBufferSize,iCurrentPosition.iLineLength))); + if (iSkip) + { + __FLOG_STMT(_LIT(logString1,"Script Line #%d:\t[Skip] : %S");) + __FLOG_STATIC2(KNetDialLogFolder(),KNetDialLogFile(),TRefByValue(logString1()),iCurrentPosition.iLineCount,&line); + } + else + { + __FLOG_STMT(_LIT(logString2,"Script Line #%d:\t%S");) + __FLOG_STATIC2(KNetDialLogFolder(),KNetDialLogFile(),TRefByValue(logString2()),iCurrentPosition.iLineCount,&line); + } + } + return KErrNone; + } + +void CScriptReader::CurrentPos(TLinePosition& aPosition,TInt aOffset) +/** +Get the current position and change the offset to aOffset. + +@param aPosition a reference to line position. +@param aOffset is offset. +*/ + { + aPosition=iCurrentPosition; + aPosition.iOffset=aOffset; + } + +void CScriptReader::SetCurrentPos(TLinePosition aPosition) +/** +Set current position to aPos and aLine + +@param aPosition is line position. +*/ + { + iCurrentPosition=aPosition; + } + +TInt CScriptReader::Reset() +/** +Reset counters and flags +*/ + { + iLoggingOn=ETrue; + iCurrentPosition.Reset(); + TInt ret=GetCurrentLine(); + __ASSERT_DEBUG(!iScriptSet || ret==KErrNone, User::Invariant()); + GetCurrentLine(); + iSkip=EFalse; + iSkipModeToggleReq=EFalse; + return ret; + }