diff -r 6b1d113cdff3 -r 6638e7f4bd8f telephonyprotocols/csdagt/script/SCHAT.CPP --- a/telephonyprotocols/csdagt/script/SCHAT.CPP Mon May 03 13:37:20 2010 +0300 +++ b/telephonyprotocols/csdagt/script/SCHAT.CPP Thu May 06 15:10:38 2010 +0100 @@ -1,277 +1,277 @@ -// 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: -// For manipulting of received data -// -// - -/** - @file schat.cpp -*/ - -#include "SCHAT.H" -#include "ND_STD.H" - -// -// CCommChatter definitions -// - -CCommChatter* CCommChatter::NewL(MCommChatNotify* aNotify,TInt aPriority,TInt aBufferSize) -/** -2 phased constructor for CCommChatter, first phase. - -@param aNotify a pointer to chat notifier. -@param aPriority is priority for this timer. -@param aBufferSize is buffer size for this object. -@exception Leaves if ConstructL() leaves, or not enough memory is available. -@return a new CCommChatter object. -*/ - { - CCommChatter* cc=new(ELeave) CCommChatter(aNotify,aPriority); - CleanupStack::PushL(cc); - cc->ConstructL(aBufferSize); - CleanupStack::Pop(); - return cc; - } - -CCommChatter::CCommChatter(MCommChatNotify* aNotify, TInt aPriority) - : CTimer(aPriority), iNotify(aNotify) -/** -Private constructor for CCommChatter, used in the first phase of construction. - -@param aNotify a pointer to chat notifier. -@param aPriority is priority for this timer. -*/ - { - CActiveScheduler::Add(this); - iList.SetOffset(_FOFF(CCommChatString,iLink)); - } - -void CCommChatter::ConstructL(TInt aBufSize) -/** -Instantiates member variables. - -@param aBufSize is buffer size for this object. -@exception Leaves if CTimer::ConstructL() or User::AllocL() leaves. -*/ - { - CTimer::ConstructL(); - iBuffer=(TText8*)User::AllocL(aBufSize); - iBufferEnd=(iBuffer+aBufSize)-1; - ClearHistory(); - } - -CCommChatter::~CCommChatter() -/** -Destructor. -Frees iBuffer's allocated memory. -*/ - { - User::Free(iBuffer); - } - -void CCommChatter::ClearHistory() -/** -Empties history. -*/ - { - iLastChar=iBuffer; - iCount=0; - } - -void CCommChatter::AddChar(TText8 aChar) -/** -Adds a character to the history buffer. -Scan all strings to find any matches that may be completed. -*/ - { - if (++iLastChar>iBufferEnd) - iLastChar=iBuffer; - *iLastChar=aChar; - ++iCount; - - TText8 fchar=(TText8)User::Fold(aChar); - - // Scan for matching last character - CCommChatString* cs; - TDblQueIter iter(iList); - TInt index=0; - - while (cs=iter++, cs!=NULL) - { - if (cs->IsFolded() - ? (cs->LastChar()==fchar && MatchF(cs)) - : (cs->LastChar()==aChar && Match(cs)) ) - { - iNotify->ChatStringMatch(index); - cs=iter; // In case user removed cs; - } - index++; - } - } - -TBool CCommChatter::Match(const CCommChatString* aString) const -/** -Matches a chat string against the history buffer (Case sensitive). -*/ - { - __ASSERT_ALWAYS(aString!=NULL, NetDialPanic(ENullCommChatString)); - - const TText8* s=aString->Ptr(); - const TText8* sp=aString->EndPtr(); - const TText8* bp=iLastChar; - - if (iCountLength()) - return EFalse; - - while (*bp==*sp && sp>=s) - { - --sp; - if (--bpPtr(); - const TText8* sp=aString->EndPtr(); - const TText8* bp=iLastChar; - - if (iCountLength()) - return EFalse; - - while (User::Fold(*bp)==*sp && sp>=s) - { - --sp; - if (--bpChatTimeout(); - } - -void CCommChatter::AddString(CCommChatString* aString) -/** -Adds a string to the list. -*/ - { - __ASSERT_ALWAYS(aString!=NULL, NetDialPanic(ENullCommChatString)); - iList.AddLast(*aString); - } - -void CCommChatter::RemoveString(CCommChatString* aString) -/** -Removes a string from the list. -*/ - { - __ASSERT_ALWAYS(aString!=NULL, NetDialPanic(ENullCommChatString)); - aString->iLink.Deque(); - } - -void CCommChatter::DeleteAllAndStop() -/** -Removes all strings from the list. -*/ - { - StopTimer(); - CCommChatString* cs; - while (!iList.IsEmpty()) - { - cs=iList.First(); - RemoveString(cs); - delete cs; - } - } - -void CCommChatter::StartTimer(const TTimeIntervalMicroSeconds32& aTimeout) -/** -Starts timer. -*/ - { - - if (IsActive()) - Cancel(); - After(aTimeout); - } - -void CCommChatter::StopTimer() -/** -Stops timer. -*/ - { - Cancel(); - } - -// -// CCommChatString definitions -// - -CCommChatString* CCommChatString::NewL(const TDesC8& aDes,TBool aIsFolded) -/** -2 phased constructor for CCommChatString, first phase. - -@param aDes a pointer to chat notifier. -@param aIsFolded is buffer size for this object. -@exception Leaves if ConstructL() leaves, or not enough memory is available. -@return a new CCommChatString object. -*/ - { - CCommChatString* cs=new (ELeave) CCommChatString; - CleanupStack::PushL(cs); - cs->ConstructL(aDes,aIsFolded); - CleanupStack::Pop(); - return cs; - } - -CCommChatString::CCommChatString() -/** -Private constructor for CCommChatString, used in the first phase of construction. -*/ - {} - -void CCommChatString::ConstructL(const TDesC8& aDes,TBool aIsFolded) -/** -Instantiates member variables. -*/ - { - __ASSERT_ALWAYS(aDes.Length()>0, NetDialPanic(ENullCommChatString)); - iIsFolded=aIsFolded; - iString=(TText8*)User::AllocL(aDes.Length()); - iLastChar=(iString+aDes.Length())-1; - Mem::Copy(iString, (TText8*)aDes.Ptr(), aDes.Length()); - } - -CCommChatString::~CCommChatString() -/** -Destructor. -Deletes allocations/objects. -*/ - { - User::Free(iString); - } +// 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: +// For manipulting of received data +// +// + +/** + @file schat.cpp +*/ + +#include "SCHAT.H" +#include "ND_STD.H" + +// +// CCommChatter definitions +// + +CCommChatter* CCommChatter::NewL(MCommChatNotify* aNotify,TInt aPriority,TInt aBufferSize) +/** +2 phased constructor for CCommChatter, first phase. + +@param aNotify a pointer to chat notifier. +@param aPriority is priority for this timer. +@param aBufferSize is buffer size for this object. +@exception Leaves if ConstructL() leaves, or not enough memory is available. +@return a new CCommChatter object. +*/ + { + CCommChatter* cc=new(ELeave) CCommChatter(aNotify,aPriority); + CleanupStack::PushL(cc); + cc->ConstructL(aBufferSize); + CleanupStack::Pop(); + return cc; + } + +CCommChatter::CCommChatter(MCommChatNotify* aNotify, TInt aPriority) + : CTimer(aPriority), iNotify(aNotify) +/** +Private constructor for CCommChatter, used in the first phase of construction. + +@param aNotify a pointer to chat notifier. +@param aPriority is priority for this timer. +*/ + { + CActiveScheduler::Add(this); + iList.SetOffset(_FOFF(CCommChatString,iLink)); + } + +void CCommChatter::ConstructL(TInt aBufSize) +/** +Instantiates member variables. + +@param aBufSize is buffer size for this object. +@exception Leaves if CTimer::ConstructL() or User::AllocL() leaves. +*/ + { + CTimer::ConstructL(); + iBuffer=(TText8*)User::AllocL(aBufSize); + iBufferEnd=(iBuffer+aBufSize)-1; + ClearHistory(); + } + +CCommChatter::~CCommChatter() +/** +Destructor. +Frees iBuffer's allocated memory. +*/ + { + User::Free(iBuffer); + } + +void CCommChatter::ClearHistory() +/** +Empties history. +*/ + { + iLastChar=iBuffer; + iCount=0; + } + +void CCommChatter::AddChar(TText8 aChar) +/** +Adds a character to the history buffer. +Scan all strings to find any matches that may be completed. +*/ + { + if (++iLastChar>iBufferEnd) + iLastChar=iBuffer; + *iLastChar=aChar; + ++iCount; + + TText8 fchar=(TText8)User::Fold(aChar); + + // Scan for matching last character + CCommChatString* cs; + TDblQueIter iter(iList); + TInt index=0; + + while (cs=iter++, cs!=NULL) + { + if (cs->IsFolded() + ? (cs->LastChar()==fchar && MatchF(cs)) + : (cs->LastChar()==aChar && Match(cs)) ) + { + iNotify->ChatStringMatch(index); + cs=iter; // In case user removed cs; + } + index++; + } + } + +TBool CCommChatter::Match(const CCommChatString* aString) const +/** +Matches a chat string against the history buffer (Case sensitive). +*/ + { + __ASSERT_ALWAYS(aString!=NULL, NetDialPanic(ENullCommChatString)); + + const TText8* s=aString->Ptr(); + const TText8* sp=aString->EndPtr(); + const TText8* bp=iLastChar; + + if (iCountLength()) + return EFalse; + + while (*bp==*sp && sp>=s) + { + --sp; + if (--bpPtr(); + const TText8* sp=aString->EndPtr(); + const TText8* bp=iLastChar; + + if (iCountLength()) + return EFalse; + + while (User::Fold(*bp)==*sp && sp>=s) + { + --sp; + if (--bpChatTimeout(); + } + +void CCommChatter::AddString(CCommChatString* aString) +/** +Adds a string to the list. +*/ + { + __ASSERT_ALWAYS(aString!=NULL, NetDialPanic(ENullCommChatString)); + iList.AddLast(*aString); + } + +void CCommChatter::RemoveString(CCommChatString* aString) +/** +Removes a string from the list. +*/ + { + __ASSERT_ALWAYS(aString!=NULL, NetDialPanic(ENullCommChatString)); + aString->iLink.Deque(); + } + +void CCommChatter::DeleteAllAndStop() +/** +Removes all strings from the list. +*/ + { + StopTimer(); + CCommChatString* cs; + while (!iList.IsEmpty()) + { + cs=iList.First(); + RemoveString(cs); + delete cs; + } + } + +void CCommChatter::StartTimer(const TTimeIntervalMicroSeconds32& aTimeout) +/** +Starts timer. +*/ + { + + if (IsActive()) + Cancel(); + After(aTimeout); + } + +void CCommChatter::StopTimer() +/** +Stops timer. +*/ + { + Cancel(); + } + +// +// CCommChatString definitions +// + +CCommChatString* CCommChatString::NewL(const TDesC8& aDes,TBool aIsFolded) +/** +2 phased constructor for CCommChatString, first phase. + +@param aDes a pointer to chat notifier. +@param aIsFolded is buffer size for this object. +@exception Leaves if ConstructL() leaves, or not enough memory is available. +@return a new CCommChatString object. +*/ + { + CCommChatString* cs=new (ELeave) CCommChatString; + CleanupStack::PushL(cs); + cs->ConstructL(aDes,aIsFolded); + CleanupStack::Pop(); + return cs; + } + +CCommChatString::CCommChatString() +/** +Private constructor for CCommChatString, used in the first phase of construction. +*/ + {} + +void CCommChatString::ConstructL(const TDesC8& aDes,TBool aIsFolded) +/** +Instantiates member variables. +*/ + { + __ASSERT_ALWAYS(aDes.Length()>0, NetDialPanic(ENullCommChatString)); + iIsFolded=aIsFolded; + iString=(TText8*)User::AllocL(aDes.Length()); + iLastChar=(iString+aDes.Length())-1; + Mem::Copy(iString, (TText8*)aDes.Ptr(), aDes.Length()); + } + +CCommChatString::~CCommChatString() +/** +Destructor. +Deletes allocations/objects. +*/ + { + User::Free(iString); + }