void TaggedDataParser::ParseTaggedDataL(const TDesC8& aData, MTaggedDataParserClient& aClient)
	{
	TPtrC8 data(aData);
	TInt readPosition = 0;
	TBool moreData = data.Length() ? ETrue : EFalse;
	while (moreData)
		{
		// Assumes that this segment will begin with a tag
		TPtrC8 restOfData = data.Mid(readPosition);

		TInt endPos = restOfData.MatchF(KTagMatch);
		if (endPos == KErrNotFound)
			User::Leave(KErrCorrupt);

		// extract the tag
		TPtrC8 tag = restOfData.Left(KTagLength);
		
	
		readPosition += KTagLength;

		// Find the next tag
		restOfData.Set(data.Mid(readPosition));
		endPos = restOfData.MatchF(KTagMatch);

		TPtrC8 tagData;
		if (endPos == KErrNotFound)
			{
			// If we didn't find a tag, we must be at the end of the data
			tagData.Set(restOfData);
			readPosition = restOfData.Length();
			moreData = EFalse;
			}
		else
			{
			tagData.Set(restOfData.Left(endPos));
			readPosition += endPos;
			}

		aClient.ProcessTaggedDataL(tag, tagData);		
		}
	}