diff -r 14460bf2a402 -r f50f4094acd7 cbsref/telephonyrefplugins/atltsy/atcommand/generic/src/respondbufparser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cbsref/telephonyrefplugins/atltsy/atcommand/generic/src/respondbufparser.cpp Tue Jul 06 15:36:38 2010 +0300 @@ -0,0 +1,141 @@ +// 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: +// This contains CRespondBufParser which provide an algorithm to analize the passed data from baseband +// + +#include "respondbufparser.h" +#include "mslogger.h" + +_LIT8(KSpace, " "); + +CRespondBufParser::CRespondBufParser() + { + } + +CRespondBufParser::~CRespondBufParser() + { + } + +// --------------------------------------------------------------------------- +// CRespondBufParser::ParseRespondedBuffer +// other items were commented in a header +// --------------------------------------------------------------------------- +void CRespondBufParser::ParseRespondedBuffer(RArray& aArray, const TDesC8& aBuf) + { + aArray.Reset(); + + TBool firstDoubleQuoteFound = EFalse; + TBool endByComma = EFalse; + TBool Marked = EFalse; + TLex8 tmpLex(aBuf); + + //Move cursor past any spaces or open brackets + while(!tmpLex.Eos()) + { + TChar peek=tmpLex.Peek(); + switch(peek) + { + //Skip the '(','[', and '{' in end + case '(': + case '[': + case '{': + break; + //Skip the '(','[', and '{' in end + case ')': + case ']': + case '}': + break; + case '"': + //Skip first '"' + if(!firstDoubleQuoteFound) + { + firstDoubleQuoteFound = ETrue; + } + else + { + //Extracts the marked token(No include the '"' in end) + firstDoubleQuoteFound = EFalse; + TPtrC8 temp = tmpLex.MarkedToken(); + aArray.Append(temp); + LOGTEXT2(_L8("normal parameter >%S<"),&(temp)); + Marked = EFalse; + endByComma = EFalse; + } + break; + case ',': + if(!firstDoubleQuoteFound) + { + if(Marked) + { + //Extracts the marked token + TPtrC8 temp = tmpLex.MarkedToken(); + aArray.Append(temp); + LOGTEXT2(_L8("normal parameter >%S<"),&(temp)); + Marked = EFalse; + } + else if(endByComma) + { + //Add a space between two camma + aArray.Append(KSpace()); + LOGTEXT2(_L8("normal parameter >%S<"),&(KSpace())); + } + endByComma = ETrue; + } + break; + case ';': + case ' ': + case '\r': + case '\n': + if(!firstDoubleQuoteFound&&Marked) + { + //Extracts the marked token + TPtrC8 temp = tmpLex.MarkedToken(); + aArray.Append(temp); + LOGTEXT2(_L8("normal parameter >%S<"),&(temp)); + Marked = EFalse; + endByComma = EFalse; + } + break; + case ':': + if(!firstDoubleQuoteFound&&Marked) + { + //Extracts the marked token(Include ':') + tmpLex.Inc(); + TPtrC8 temp = tmpLex.MarkedToken(); + aArray.Append(temp); + LOGTEXT2(_L8("normal parameter >%S<"),&(temp)); + //back one char because add it in end + tmpLex.Inc(-1); + Marked = EFalse; + endByComma = EFalse; + } + break; + default: + if(!Marked) + { + tmpLex.Mark(); + Marked = ETrue; + } + break; + } + tmpLex.Inc(); + } + if(Marked) + { + //Extracts the marked token which haven't + TPtrC8 temp = tmpLex.MarkedToken(); + aArray.Append(temp); + LOGTEXT2(_L8("normal parameter >%S<"),&(temp)); + } + }