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); } }