cbsref/telephonyrefplugins/atltsy/comms/src/stringparser.cpp
author hgs
Tue, 22 Jun 2010 11:02:32 +0100
changeset 44 8b72faa1200f
permissions -rw-r--r--
201024_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
44
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     1
// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     2
// All rights reserved.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     7
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     8
// Initial Contributors:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    10
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    11
// Contributors:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    12
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    13
// Description:
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    14
// CStringParser.
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    15
// 
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    16
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    17
//user include
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    18
#include "stringparser.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    19
#include "mslogger.h"
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    20
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    21
CStringParser* CStringParser::NewL(TInt aBufferSize)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    22
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    23
	LOGTEXT(_L8("[Ltsy] Starting CStringParser::NewL()"));
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    24
	
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    25
	CStringParser* self = CStringParser::NewLC(aBufferSize);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    26
	CleanupStack::Pop(self);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    27
	return self;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    28
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    29
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    30
CStringParser* CStringParser::NewLC(TInt aBufferSize)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    31
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    32
	LOGTEXT(_L8("[Ltsy] Starting CStringParser::NewLC()"));
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    33
	
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    34
	CStringParser* self = new (ELeave) CStringParser;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    35
	CleanupStack::PushL(self);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    36
	self->ConstructL(aBufferSize);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    37
	return self;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    38
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    39
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    40
CStringParser::~CStringParser()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    41
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    42
	User::Free(iBuffer);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    43
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    44
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    45
CStringParser::CStringParser()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    46
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    47
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    48
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    49
void CStringParser::ConstructL(TInt aBufferSize)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    50
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    51
	LOGTEXT(_L8("[Ltsy] Starting CStringParser::ConstructL()"));
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    52
	CreateL(aBufferSize);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    53
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    54
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    55
TPtrC8 CStringParser::Buffer() const
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    56
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    57
	return TPtrC8(iBuffer, iLastChar-iBuffer);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    58
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    59
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    60
TPtrC8 CStringParser::CurrentLine() const
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    61
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    62
	TInt len=iLastChar-iLineStart;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    63
	if (len>0 && iInDelimiter)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    64
		len-=1;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    65
	return TPtrC8(iLineStart, len);	
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    66
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    67
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    68
void CStringParser::ClearBuffer()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    69
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    70
	iLastChar = iBuffer;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    71
	iLineStart = iBuffer;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    72
	iInDelimiter = ETrue;	
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    73
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    74
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    75
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    76
// Remove current line, which is always at the end of the buffer
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    77
//
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    78
void CStringParser::ClearCurrentLine()
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    79
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    80
	iLastChar = iLineStart;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    81
	iInDelimiter = ETrue;	
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    82
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    83
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    84
void CStringParser::CreateL(TInt aBufSize)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    85
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    86
	iBuffer = (TText8*)User::AllocL(aBufSize);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    87
	iBufferEnd = (iBuffer+aBufSize)-1;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    88
	ClearBuffer();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    89
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    90
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    91
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    92
void CStringParser::SetReadLineNotify(MCommReadLineNotifier* aNofity)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    93
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    94
	iReadLineNotify = aNofity;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    95
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    96
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    97
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    98
void CStringParser::ProcessReadString(const TDesC8& aReadString)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
    99
	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   100
	LOGTEXT(_L8("[Ltsy] Starting CStringParse::ProcessReadString()"));
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   101
	LOGTEXT2(_L8("[Ltsy] Read String = %S"), &aReadString);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   102
	for (TInt nBufferOffset = 0; nBufferOffset < aReadString.Length(); nBufferOffset++)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   103
		{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   104
		TText8 tChar = aReadString[nBufferOffset];
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   105
		
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   106
		// we have already found a char which is a delimiter of the Line
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   107
        // so would dismiss any of delimiter following this one already found		
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   108
		if (iInDelimiter && (tChar == '\r' || tChar == '\n'))
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   109
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   110
			continue;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   111
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   112
		
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   113
		// move on lastchar
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   114
		*iLastChar++ = tChar;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   115
		// Diacarding characters if our buffer was overflowed
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   116
		if (iLastChar >= iBufferEnd)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   117
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   118
			iLastChar = iBufferEnd;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   119
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   120
        // we anyway to find out the delimiter and notify the obser the line was found 		
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   121
		if (tChar == '\r' || tChar == '\n')
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   122
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   123
			iInDelimiter = ETrue;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   124
			TPtrC8 tLine(CurrentLine());
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   125
			LOGTEXT2(_L8("[Ltsy] Line Content = %S"), &tLine);
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   126
			TRAPD(err, iReadLineNotify->NotifyOneLineFoundL(KErrNone, tLine));
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   127
			if (err != KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   128
				{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   129
				ClearCurrentLine();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   130
				}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   131
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   132
		else
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   133
			{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   134
			if(iInDelimiter) // the last char is a delimiter
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   135
			    {
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   136
				iInDelimiter=EFalse;
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   137
			    iLineStart=iLastChar-1;	
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   138
			    if(tChar == '>')
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   139
			    	{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   140
			    	TPtrC8 tLine(CurrentLine());
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   141
			    	TRAPD(err, iReadLineNotify->NotifyOneLineFoundL(KErrNone, tLine));
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   142
					if (err != KErrNone)
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   143
						{
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   144
						ClearCurrentLine();
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   145
						}			    	
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   146
			    	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   147
				}   
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   148
			}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   149
		}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   150
	LOGTEXT(_L8("[Ltsy] End CStringParse::ProcessReadString()"));
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   151
	}
8b72faa1200f 201024_02
hgs
parents:
diff changeset
   152
//End of file