--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cbsref/telephonyrefplugins/atltsy/comms/src/stringparser.cpp Tue Jul 06 15:36:38 2010 +0300
@@ -0,0 +1,152 @@
+// Copyright (c) 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:
+// CStringParser.
+//
+
+//user include
+#include "stringparser.h"
+#include "mslogger.h"
+
+CStringParser* CStringParser::NewL(TInt aBufferSize)
+ {
+ LOGTEXT(_L8("[Ltsy] Starting CStringParser::NewL()"));
+
+ CStringParser* self = CStringParser::NewLC(aBufferSize);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CStringParser* CStringParser::NewLC(TInt aBufferSize)
+ {
+ LOGTEXT(_L8("[Ltsy] Starting CStringParser::NewLC()"));
+
+ CStringParser* self = new (ELeave) CStringParser;
+ CleanupStack::PushL(self);
+ self->ConstructL(aBufferSize);
+ return self;
+ }
+
+CStringParser::~CStringParser()
+ {
+ User::Free(iBuffer);
+ }
+
+CStringParser::CStringParser()
+ {
+ }
+
+void CStringParser::ConstructL(TInt aBufferSize)
+ {
+ LOGTEXT(_L8("[Ltsy] Starting CStringParser::ConstructL()"));
+ CreateL(aBufferSize);
+ }
+
+TPtrC8 CStringParser::Buffer() const
+ {
+ return TPtrC8(iBuffer, iLastChar-iBuffer);
+ }
+
+TPtrC8 CStringParser::CurrentLine() const
+ {
+ TInt len=iLastChar-iLineStart;
+ if (len>0 && iInDelimiter)
+ len-=1;
+ return TPtrC8(iLineStart, len);
+ }
+
+void CStringParser::ClearBuffer()
+ {
+ iLastChar = iBuffer;
+ iLineStart = iBuffer;
+ iInDelimiter = ETrue;
+ }
+
+//
+// Remove current line, which is always at the end of the buffer
+//
+void CStringParser::ClearCurrentLine()
+ {
+ iLastChar = iLineStart;
+ iInDelimiter = ETrue;
+ }
+
+void CStringParser::CreateL(TInt aBufSize)
+ {
+ iBuffer = (TText8*)User::AllocL(aBufSize);
+ iBufferEnd = (iBuffer+aBufSize)-1;
+ ClearBuffer();
+ }
+
+
+void CStringParser::SetReadLineNotify(MCommReadLineNotifier* aNofity)
+ {
+ iReadLineNotify = aNofity;
+ }
+
+
+void CStringParser::ProcessReadString(const TDesC8& aReadString)
+ {
+ LOGTEXT(_L8("[Ltsy] Starting CStringParse::ProcessReadString()"));
+ LOGTEXT2(_L8("[Ltsy] Read String = %S"), &aReadString);
+ for (TInt nBufferOffset = 0; nBufferOffset < aReadString.Length(); nBufferOffset++)
+ {
+ TText8 tChar = aReadString[nBufferOffset];
+
+ // we have already found a char which is a delimiter of the Line
+ // so would dismiss any of delimiter following this one already found
+ if (iInDelimiter && (tChar == '\r' || tChar == '\n'))
+ {
+ continue;
+ }
+
+ // move on lastchar
+ *iLastChar++ = tChar;
+ // Diacarding characters if our buffer was overflowed
+ if (iLastChar >= iBufferEnd)
+ {
+ iLastChar = iBufferEnd;
+ }
+ // we anyway to find out the delimiter and notify the obser the line was found
+ if (tChar == '\r' || tChar == '\n')
+ {
+ iInDelimiter = ETrue;
+ TPtrC8 tLine(CurrentLine());
+ LOGTEXT2(_L8("[Ltsy] Line Content = %S"), &tLine);
+ TRAPD(err, iReadLineNotify->NotifyOneLineFoundL(KErrNone, tLine));
+ if (err != KErrNone)
+ {
+ ClearCurrentLine();
+ }
+ }
+ else
+ {
+ if(iInDelimiter) // the last char is a delimiter
+ {
+ iInDelimiter=EFalse;
+ iLineStart=iLastChar-1;
+ if(tChar == '>')
+ {
+ TPtrC8 tLine(CurrentLine());
+ TRAPD(err, iReadLineNotify->NotifyOneLineFoundL(KErrNone, tLine));
+ if (err != KErrNone)
+ {
+ ClearCurrentLine();
+ }
+ }
+ }
+ }
+ }
+ LOGTEXT(_L8("[Ltsy] End CStringParse::ProcessReadString()"));
+ }
+//End of file