diff -r 000000000000 -r af10295192d8 networkingtestandutils/networkingintegrationtest/NTRas/CHAT.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/networkingtestandutils/networkingintegrationtest/NTRas/CHAT.CPP Tue Jan 26 15:23:49 2010 +0200 @@ -0,0 +1,230 @@ +// Copyright (c) 1997-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: +// + +#include "chat.h" + +CCommChatString* CCommChatString::NewL(const TDesC8& aDes, TBool aIsFolded) +// +// +// + { + CCommChatString* cs = new (ELeave) CCommChatString; + CleanupStack::PushL(cs); + cs->CreateL(aDes, aIsFolded); + CleanupStack::Pop(); + return cs; + } + +CCommChatString::CCommChatString() +// +// +// + { + __DECLARE_NAME(_S("CCommChatString")); + } + +CCommChatString::~CCommChatString() +// +// +// + { + User::Free(iString); + } + +void CCommChatString::CreateL(const TDesC8& aDes, TBool aIsFolded) +// +// +// + { + iIsFolded = aIsFolded; + iString = (TText8*) User::AllocL(aDes.Length()); + iLastChar = (iString+aDes.Length())-1; + Mem::Copy(iString, (TUint8*)aDes.Ptr(), aDes.Length()); + } + +CCommChatter::CCommChatter(MCommChatNotify* aNotify, TInt aPriority) +// +// +// + : CTimer(aPriority), iNotify(aNotify) + { + __DECLARE_NAME(_S("CCommChatter")); + CActiveScheduler::Add(this); + iList.SetOffset(_FOFF(CCommChatString,iLink)); + } + +CCommChatter::~CCommChatter() +// +// +// + { + DeleteAllAndStop(); + User::Free(iBuffer); + } + +void CCommChatter::CreateL(TInt aBufSize) +// +// +// + { + CTimer::ConstructL(); + iBuffer = (TText8*)User::AllocL(aBufSize); + iBufferEnd = (iBuffer+aBufSize)-1; + ClearHistory(); + } + +void CCommChatter::ClearHistory() +// +// Empty history +// + { + iLastChar = iBuffer; + iCount = 0; + } + +void CCommChatter::AddChar(TText8 aChar) +// +// Add a character to the history buffer +// Scan all strings to find any matches that may +// be completed. +// + { + // Add char to buffer + if (++iLastChar>iBufferEnd) + iLastChar = iBuffer; + *iLastChar = aChar; + ++iCount; + + TText8 fchar = (TText8)User::Fold(aChar); + + // Scan for matching last character + CCommChatString* cs; + TDblQueIter iter(iList); + + while (cs = iter++, cs!=NULL) + { + if (cs->IsFolded() + ? (cs->LastChar()==fchar && MatchF(cs)) + : (cs->LastChar()==aChar && Match(cs)) ) + { + iNotify->ChatStringMatch(cs); + cs = iter; // In case user removed cs; + } + } + } + + +TBool CCommChatter::Match(const CCommChatString* aString) const +// +// Match a chat sgring against the history buffer +// (Case sensitive) +// + { + 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) +// +// Add a string to the list +// + { + iList.AddLast(*aString); + } + +void CCommChatter::RemoveString(CCommChatString* aString) +// +// Remove a string +// + { + aString->iLink.Deque(); + } + +void CCommChatter::DeleteAllAndStop() +// +// Remove a string +// + { + StopTimer(); + CCommChatString* cs; + while (!iList.IsEmpty()) + { + cs = iList.First(); + RemoveString(cs); + delete cs; + } + } + +void CCommChatter::StartTimer(TTimeIntervalMicroSeconds32 aTimeout) +// +// +// + { + if (IsActive()) + Cancel(); + After(aTimeout); + } + +void CCommChatter::StopTimer() +// +// +// + { + Cancel(); + }