diff -r b3cee849fa46 -r fad26422216a creator/src/creator_scriptentry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/creator/src/creator_scriptentry.cpp Wed Sep 01 12:30:35 2010 +0100 @@ -0,0 +1,728 @@ +/* +* Copyright (c) 2008 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: +* +*/ + + +#include "creator_model.h" +#include "creator_traces.h" +#include "creator_factory.h" + +#include +#include + + +#include + + +const TInt KReadBufSize = 8192; + +// Creator random data file filter +_LIT(KRandomDataFileFilter, "*.creatordataxml"); + +// --------------------------------------------------------------------------- + + +CCommandParser* CCommandParser::NewL(CCreatorEngine* aEngine) + { + CCommandParser* self = CCommandParser::NewLC(aEngine); + CleanupStack::Pop(self); + return self; + } + +CCommandParser* CCommandParser::NewLC(CCreatorEngine* aEngine) + { + CCommandParser* self = new (ELeave) CCommandParser; + CleanupStack::PushL(self); + self->ConstructL(aEngine); + return self; + } + +CCommandParser::CCommandParser() + { + } + +void CCommandParser::ConstructL(CCreatorEngine* aEngine) + { + LOGSTRING("Creator: CCommandParser::ConstructL"); + + iEngine = aEngine; + + iReadBuf = HBufC8::NewL(KReadBufSize); + } + +CCommandParser::~CCommandParser() + { + LOGSTRING("Creator: CCommandParser::~CCommandParser"); + + if (iSearchArray) + delete iSearchArray; + + if (iReadBuf) + delete iReadBuf; + } + + +// --------------------------------------------------------------------------- +//#if(!defined __SERIES60_30__ && !defined __SERIES60_31__) +void CCommandParser::OpenScriptL() {} +TBool CCommandParser::OpenScriptL(RFile& aScriptFile) + { + LOGSTRING("Creator: CCommandParser::OpenScriptL"); + TBool ret = EFalse; + + // init the search array + iSearchArray = new(ELeave) CDesCArrayFlat(500); + + // wait dialog + CAknGlobalNote* waitDialog = CAknGlobalNote::NewLC(); + waitDialog->SetSoftkeys(R_AVKON_SOFTKEYS_CANCEL); + TInt dialogId = waitDialog->ShowNoteL(EAknGlobalWaitNote, _L("Searching")); + + + // search all the .creator files from the phone + TInt err; + TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\"))); + + TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\system\\apps\\Creator\\"))); + + TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\data\\"))); + TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\data\\"))); + + TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\documents\\"))); + TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\documents\\"))); + + TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\creator\\"))); + TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\creator\\"))); + + TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\scripts\\"))); + TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\scripts\\"))); + + TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\temp\\"))); + TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\temp\\"))); + + TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\system\\temp\\"))); + TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\system\\temp\\"))); + + TRAP(err, FindFiles(_L("*.creatorxml"), _L("\\private\\20011383\\"))); + TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\private\\20011383\\"))); + + TRAP(err, FindFilesRecursiveL(_L("*.creatorxml"), _L("\\private\\1000484b\\"))); + + + // remove the wait dialog + waitDialog->CancelNoteL(dialogId); + CleanupStack::PopAndDestroy(); //waitDialog; + + + if ( iSearchArray->MdcaCount() > 0) + { + // create a file name array based on the iSearchArray + CDesCArray* fileNameArray = new(ELeave) CDesCArrayFlat(iSearchArray->MdcaCount()); + CleanupStack::PushL(fileNameArray); + + for (TInt i=0; iMdcaCount(); i++) + { + + TParse filename; // file name parser + filename.Set(iSearchArray->MdcaPoint(i), NULL, NULL); + + if ( filename.Drive()[0] == 'e' || filename.Drive()[0] == 'E') // MMC + { + TFileName nameMMC; + nameMMC.Append(filename.Name()); + nameMMC.Append(_L("\t0")); // MMC icon + fileNameArray->AppendL(nameMMC); + } + else + { + fileNameArray->AppendL(filename.Name()); + } + } + CleanupStack::Pop(fileNameArray); + + + // create a popup list + CAknSinglePopupMenuStyleListBox* listBox = new(ELeave) CAknSinglePopupMenuStyleListBox; + CleanupStack::PushL(listBox); + CAknPopupList* popupList = CAknPopupList::NewL( listBox, R_AVKON_SOFTKEYS_SELECT_CANCEL, AknPopupLayouts::EMenuWindow ); + CleanupStack::PushL(popupList); + popupList->SetTitleL(_L("Select script")); + listBox->ConstructL( popupList, EAknListBoxSelectionList|EAknListBoxLoopScrolling ); + listBox->CreateScrollBarFrameL( ETrue ); + listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto); + listBox->Model()->SetItemTextArray( fileNameArray ); + listBox->Model()->SetOwnershipType( ELbmOwnsItemArray ); // !!! + listBox->HandleItemAdditionL(); + + + // define MMC icon + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + _LIT( KFLDMemoryCardUiBitmapFile, "z:aknmemorycardui.mbm" ); + CAknIconArray* iconArray = new( ELeave ) CAknIconArray( 1 ); + listBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray ); + + TParse* fp = new(ELeave) TParse(); + fp->Set(KFLDMemoryCardUiBitmapFile, &KDC_APP_BITMAP_DIR, NULL); + TFileName resourceFileName( fp->FullName() ); + delete fp; + + CGulIcon* icon = AknsUtils::CreateGulIconL( skin, KAknsIIDQgnIndiMmcAdd, + resourceFileName, + EMbmAknmemorycarduiQgn_indi_mmc_add, + EMbmAknmemorycarduiQgn_indi_mmc_add_mask ); + CleanupStack::PushL( icon ); + iconArray->AppendL( icon ); + CleanupStack::Pop( icon ); + + + // execute dialog + TBool result = popupList->ExecuteLD(); + CleanupStack::Pop(); // popupList + + if ( result ) + { + // open the file for reading + //RFile file; + TRAPD(err, aScriptFile.Open(CEikonEnv::Static()->FsSession(), iSearchArray->MdcaPoint(listBox->CurrentItemIndex()), EFileRead)); + if( err != KErrNone) + { + aScriptFile.Close(); + User::Leave(err); + } + ret = ETrue; + } + CleanupStack::PopAndDestroy(); //listBox + } + else // no scripts found from the search paths + { + CAknInformationNote* note = new (ELeave) CAknInformationNote; + note->ExecuteLD(_L("No scripts found")); + } + + delete iSearchArray; + iSearchArray = NULL; + return ret; + } +/* +#else +// --------------------------------------------------------------------------- +void CCommandParser::OpenScriptL() + { + LOGSTRING("Creator: CCommandParser::OpenScriptL"); + + // init the search array + iSearchArray = new(ELeave) CDesCArrayFlat(500); + + // wait dialog + CAknGlobalNote* waitDialog = CAknGlobalNote::NewLC(); + waitDialog->SetSoftkeys(R_AVKON_SOFTKEYS_CANCEL); + TInt dialogId = waitDialog->ShowNoteL(EAknGlobalWaitNote, _L("Searching")); + + + // search all the .creator files from the phone + TInt err; + TRAP(err, FindFiles(_L("*.creator"), _L("\\"))); + + TRAP(err, FindFiles(_L("*.creator"), _L("\\system\\apps\\Creator\\"))); + + TRAP(err, FindFiles(_L("*.creator"), _L("\\data\\"))); + TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\data\\"))); + + TRAP(err, FindFiles(_L("*.creator"), _L("\\documents\\"))); + TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\documents\\"))); + + TRAP(err, FindFiles(_L("*.creator"), _L("\\creator\\"))); + TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\creator\\"))); + + TRAP(err, FindFiles(_L("*.creator"), _L("\\scripts\\"))); + TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\scripts\\"))); + + TRAP(err, FindFiles(_L("*.creator"), _L("\\temp\\"))); + TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\temp\\"))); + + TRAP(err, FindFiles(_L("*.creator"), _L("\\system\\temp\\"))); + TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\system\\temp\\"))); + + TRAP(err, FindFiles(_L("*.creator"), _L("\\private\\101FA751\\"))); + TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\private\\101FA751\\"))); + + TRAP(err, FindFilesRecursiveL(_L("*.creator"), _L("\\private\\1000484b\\"))); + + + // remove the wait dialog + waitDialog->CancelNoteL(dialogId); + CleanupStack::PopAndDestroy(); //waitDialog; + + + if ( iSearchArray->MdcaCount() > 0) + { + // create a file name array based on the iSearchArray + CDesCArray* fileNameArray = new(ELeave) CDesCArrayFlat(iSearchArray->MdcaCount()); + CleanupStack::PushL(fileNameArray); + + for (TInt i=0; iMdcaCount(); i++) + { + + TParse filename; // file name parser + filename.Set(iSearchArray->MdcaPoint(i), NULL, NULL); + + if ( filename.Drive()[0] == 'e' || filename.Drive()[0] == 'E') // MMC + { + TFileName nameMMC; + nameMMC.Append(filename.Name()); + nameMMC.Append(_L("\t0")); // MMC icon + fileNameArray->AppendL(nameMMC); + } + else + { + fileNameArray->AppendL(filename.Name()); + } + } + CleanupStack::Pop(fileNameArray); + + + // create a popup list + CAknSinglePopupMenuStyleListBox* listBox = new(ELeave) CAknSinglePopupMenuStyleListBox; + CleanupStack::PushL(listBox); + CAknPopupList* popupList = CAknPopupList::NewL( listBox, R_AVKON_SOFTKEYS_SELECT_CANCEL, AknPopupLayouts::EMenuWindow ); + CleanupStack::PushL(popupList); + popupList->SetTitleL(_L("Select script")); + listBox->ConstructL( popupList, EAknListBoxSelectionList|EAknListBoxLoopScrolling ); + listBox->CreateScrollBarFrameL( ETrue ); + listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto); + listBox->Model()->SetItemTextArray( fileNameArray ); + listBox->Model()->SetOwnershipType( ELbmOwnsItemArray ); // !!! + listBox->HandleItemAdditionL(); + + + // define MMC icon + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + _LIT( KFLDMemoryCardUiBitmapFile, "z:aknmemorycardui.mbm" ); + CAknIconArray* iconArray = new( ELeave ) CAknIconArray( 1 ); + listBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray ); + + TParse* fp = new(ELeave) TParse(); + fp->Set(KFLDMemoryCardUiBitmapFile, &KDC_APP_BITMAP_DIR, NULL); + TFileName resourceFileName( fp->FullName() ); + delete fp; + + CGulIcon* icon = AknsUtils::CreateGulIconL( skin, KAknsIIDQgnIndiMmcAdd, + resourceFileName, + EMbmAknmemorycarduiQgn_indi_mmc_add, + EMbmAknmemorycarduiQgn_indi_mmc_add_mask ); + CleanupStack::PushL( icon ); + iconArray->AppendL( icon ); + CleanupStack::Pop( icon ); + + + // execute dialog + TBool result = popupList->ExecuteLD(); + CleanupStack::Pop(); // popupList + + if ( result ) + { + // open the file for reading + RFile file; + User::LeaveIfError(file.Open(CEikonEnv::Static()->FsSession(), iSearchArray->MdcaPoint(listBox->CurrentItemIndex()), EFileRead)); + while (ReadLineFromFileL(file) == KErrNone) + { + iReadBuf->Des().Trim(); // delete leading and trailing white space + + if (iReadBuf->Length() < 5) // command too short, ignoring... + { + //CEikonEnv::Static()->InfoMsg(_L("Corrupted line")); + } + + // check it's a valid line: first char is A-Z and the line ends to ';' + else if (iReadBuf->Des()[0] >= 'A' && iReadBuf->Des()[0] <= 'Z' && iReadBuf->Des()[iReadBuf->Length()-1] == ';') + { + // this line is valid -> parse the command + ParseCommandFromDescriptorL(); + } + else + { + //CEikonEnv::Static()->InfoMsg(_L("Not a valid line")); + } + + } + + file.Close(); + + // show a note if there were no valid commands in the script + if (iEngine->CommandArrayCount() == 0) + { + CAknInformationNote* note = new(ELeave) CAknInformationNote; + note->ExecuteLD(_L("No valid commands in this script")); + } + + } + + CleanupStack::PopAndDestroy(); //listBox + } + + else // no scripts found from the search paths + { + CAknInformationNote* note = new (ELeave) CAknInformationNote; + note->ExecuteLD(_L("No scripts found")); + } + + + delete iSearchArray; + iSearchArray = NULL; + + } +#endif +*/ + +TBool CCommandParser::GetRandomDataFilenameL(TDes& aFilename) + { + LOGSTRING("Creator: CCommandParser::GetRandomDataFilenameL"); + TBool ret = EFalse; + + // init the search array + if (iSearchArray) + { + delete iSearchArray; + iSearchArray = NULL; + } + iSearchArray = new(ELeave) CDesCArrayFlat(500); + + // wait dialog + CAknGlobalNote* waitDialog = CAknGlobalNote::NewLC(); + waitDialog->SetSoftkeys(R_AVKON_SOFTKEYS_CANCEL); + TInt dialogId = waitDialog->ShowNoteL(EAknGlobalWaitNote, _L("Searching")); + + + // search all the creator random data files from the phone + TInt err; + TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\"))); + + TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\system\\apps\\Creator\\"))); + + TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\data\\"))); + TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\data\\"))); + + TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\documents\\"))); + TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\documents\\"))); + + TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\creator\\"))); + TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\creator\\"))); + + TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\scripts\\"))); + TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\scripts\\"))); + + TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\temp\\"))); + TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\temp\\"))); + + TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\system\\temp\\"))); + TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\system\\temp\\"))); + + TRAP(err, FindFiles(KRandomDataFileFilter, _L("\\private\\20011383\\"))); + TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\private\\20011383\\"))); + + TRAP(err, FindFilesRecursiveL(KRandomDataFileFilter, _L("\\private\\1000484b\\"))); + + + // remove the wait dialog + waitDialog->CancelNoteL(dialogId); + CleanupStack::PopAndDestroy(); //waitDialog; + + + if (iSearchArray->MdcaCount() > 0) + { + // create a file name array based on the iSearchArray + CDesCArray* fileNameArray = new(ELeave) CDesCArrayFlat(iSearchArray->MdcaCount() + 1); + CleanupStack::PushL(fileNameArray); + + for (TInt i=0; iMdcaCount(); i++) + { + + TParse filename; // file name parser + filename.Set(iSearchArray->MdcaPoint(i), NULL, NULL); + + if ( filename.Drive()[0] == 'e' || filename.Drive()[0] == 'E') // MMC + { + TFileName nameMMC; + nameMMC.Append(filename.Name()); + nameMMC.Append(_L("\t0")); // MMC icon + fileNameArray->AppendL(nameMMC); + } + else + { + fileNameArray->AppendL(filename.Name()); + } + } + + // add "default" (resource file) to list + fileNameArray->AppendL(_L("Default")); + + CleanupStack::Pop(fileNameArray); + + + // create a popup list + CAknSinglePopupMenuStyleListBox* listBox = new(ELeave) CAknSinglePopupMenuStyleListBox; + CleanupStack::PushL(listBox); + CAknPopupList* popupList = CAknPopupList::NewL( listBox, R_AVKON_SOFTKEYS_SELECT_CANCEL, AknPopupLayouts::EMenuWindow ); + CleanupStack::PushL(popupList); + popupList->SetTitleL(_L("Select random data file")); + listBox->ConstructL( popupList, EAknListBoxSelectionList|EAknListBoxLoopScrolling ); + listBox->CreateScrollBarFrameL( ETrue ); + listBox->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto); + listBox->Model()->SetItemTextArray( fileNameArray ); + listBox->Model()->SetOwnershipType( ELbmOwnsItemArray ); // !!! + listBox->HandleItemAdditionL(); + + + // define MMC icon + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + _LIT( KFLDMemoryCardUiBitmapFile, "z:aknmemorycardui.mbm" ); + CAknIconArray* iconArray = new( ELeave ) CAknIconArray( 1 ); + listBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray ); + + TParse* fp = new(ELeave) TParse(); + fp->Set(KFLDMemoryCardUiBitmapFile, &KDC_APP_BITMAP_DIR, NULL); + TFileName resourceFileName( fp->FullName() ); + delete fp; + + CGulIcon* icon = AknsUtils::CreateGulIconL( skin, KAknsIIDQgnIndiMmcAdd, + resourceFileName, + EMbmAknmemorycarduiQgn_indi_mmc_add, + EMbmAknmemorycarduiQgn_indi_mmc_add_mask ); + CleanupStack::PushL( icon ); + iconArray->AppendL( icon ); + CleanupStack::Pop( icon ); + + + // execute dialog + TBool result = popupList->ExecuteLD(); + CleanupStack::Pop(); // popupList + + if ( result ) + { + if (listBox->CurrentItemIndex() == (fileNameArray->Count() - 1)) + { + // "default" (resource file) selected + aFilename.Copy(KNullDesC); + } + else + { + // xml file selected + aFilename.Copy(iSearchArray->MdcaPoint(listBox->CurrentItemIndex())); + } + ret = ETrue; + } + CleanupStack::PopAndDestroy(); //listBox + } + else // no random data files found from the search paths + { + CAknInformationNote* note = new (ELeave) CAknInformationNote; + note->ExecuteLD(_L("No random data files found")); + } + + delete iSearchArray; + iSearchArray = NULL; + return ret; + } + +TInt CCommandParser::FindFilesRecursiveL(const TDesC& aFileName, const TDesC& aPath) + { + return CreatorFileUtils::FindFilesRecursiveL(iSearchArray, aFileName, aPath); + } +TInt CreatorFileUtils::FindFilesRecursiveL(CDesCArrayFlat* aFileArray, const TDesC& aFileName, const TDesC& aPath) + { + TInt err = KErrNone; + CDirScan* scan = CDirScan::NewLC(CEikonEnv::Static()->FsSession()); + scan->SetScanDataL(aPath, KEntryAttDir, ESortNone); + CDir* dirEntries = NULL; + + for(;;) + { + TRAP(err, scan->NextL(dirEntries)); + if (!dirEntries || (err!=KErrNone)) + break; + + for (TInt i=0; iCount(); i++) + { + TFileName path(scan->FullPath()); + path.Append((*dirEntries)[i].iName); + path.Append(_L("\\")); + FindFiles(aFileArray, aFileName, path); + } + delete(dirEntries); + } + + CleanupStack::PopAndDestroy(scan); + return err; + } + +TInt CreatorFileUtils::FindFiles(CDesCArrayFlat* aFileArray, const TDesC& aFileName, const TDesC& aPath) + { + TFindFile fileFinder(CEikonEnv::Static()->FsSession()); + CDir* fileList; + TInt err = fileFinder.FindWildByDir(aFileName, aPath, fileList); + + while (err == KErrNone) + { + for (TInt i=0; iCount(); i++) + { + TParse fullentry; + fullentry.Set((*fileList)[i].iName, &fileFinder.File(), NULL); + + TRAP(err, aFileArray->AppendL(fullentry.FullName())); + } + + delete fileList; + err = fileFinder.FindWild(fileList); + } + return err; + } +// --------------------------------------------------------------------------- + +TInt CCommandParser::FindFiles(const TDesC& aFileName, const TDesC& aPath) + { + return CreatorFileUtils::FindFiles(iSearchArray, aFileName, aPath); + } + +// --------------------------------------------------------------------------- + +TInt CCommandParser::ReadLineFromFileL(RFile& aInputFile) + { + LOGSTRING("Creator: CCommandParser::ReadLineFromFile"); + + _LIT8(KImcvCRLF, "\r\n"); + + TInt err = KErrNone; + + // Read into the buffer + HBufC8* tempLine = HBufC8::NewLC(KReadBufSize); + TPtr8 buffer = tempLine->Des(); + + // clear the targer + iReadBuf->Des().Copy(_L("")); + + // Get the current file position + TInt filePos = 0; + aInputFile.Seek(ESeekCurrent, filePos); + + // Read the buffer + err = aInputFile.Read(buffer); + + //end of file? + TInt s = buffer.Length(); + if ( s == 0) + err = KErrEof; + + if (err == KErrNone) + { + // Copy to the lfcr and then set the file pointer to the point after that + TInt pos = buffer.Find(KImcvCRLF); + if ( pos != -1) + { + iReadBuf->Des().Justify(buffer, pos, ELeft, ' '); + filePos += (pos+2); + + // Set the file pointer back to after the lfcr + aInputFile.Seek(ESeekStart, filePos); + } + // Else fill the whole buffer + else + { + iReadBuf->Des().Copy(buffer); + } + } + + CleanupStack::PopAndDestroy(); // tempLine + return err; + } + +// --------------------------------------------------------------------------- + +void CCommandParser::StrParserL(HBufC*& aDestinationBuf, TUint aToken) + { + // store old position + iParserOldPosition = iParserPosition; + + // make sure we are not reading outside of buffer + if (iParserPosition >= iReadBuf->Length() - 1) + return; + + // read until asked token + do + { + iParserPosition++; + } + while (iReadBuf->Des()[iParserPosition] != aToken && iParserPosition < iReadBuf->Des().Length()-1); + + // calculate length of the destination buffer + TInt bufferLength = iParserPosition-iParserOldPosition-1; + + // reset the destination buffer + if (aDestinationBuf) + { + delete aDestinationBuf; + aDestinationBuf = NULL; + } + + // allocate memory for the destination buffer + aDestinationBuf = HBufC::NewL(bufferLength); + + // copy data from the read buffer to the destination buffer + aDestinationBuf->Des().Copy(iReadBuf->Des().Mid(iParserOldPosition+1, bufferLength)); + } + +// --------------------------------------------------------------------------- + +void CCommandParser::StrParserL(HBufC8*& aDestinationBuf, TUint aToken) + { + // store old position + iParserOldPosition = iParserPosition; + + // make sure we are not reading outside of buffer + if (iParserPosition >= iReadBuf->Length() - 1) + return; + + // read until asked token + do + { + iParserPosition++; + } + while (iReadBuf->Des()[iParserPosition] != aToken && iParserPosition < iReadBuf->Des().Length()-1); + + // calculate length of the destination buffer + TInt bufferLength = iParserPosition-iParserOldPosition-1; + + // reset the destination buffer + if (aDestinationBuf) + { + delete aDestinationBuf; + aDestinationBuf = NULL; + } + + // allocate memory for the destination buffer + aDestinationBuf = HBufC8::NewL(bufferLength); + + // copy data from the read buffer to the destination buffer + aDestinationBuf->Des().Copy(iReadBuf->Des().Mid(iParserOldPosition+1, bufferLength)); + } + +//---------------------------------------------------------------------------- + +void CCommandParser::HandleSessionEventL(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) // from MMsvSessionObserver + { + } + +//---------------------------------------------------------------------------- +